home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / slave.s < prev    next >
Text File  |  1997-01-31  |  109KB  |  7,426 lines

  1.  
  2. maxscrdiv EQU 8
  3. max3ddiv EQU 5
  4. playerheight EQU 12*1024
  5. playercrouched EQU 6*1024
  6. scrheight EQU 80
  7.  
  8. ; k/j/m
  9. ; 4/8
  10. ; s/x
  11. ; b/n
  12.  
  13. xpos EQU 0    ;l
  14. zpos EQU 4    ;l
  15. zsinval EQU 8    ;w
  16. zcosval EQU 10    ;w
  17. ztox EQU 12    ;l
  18. xsinval EQU 16    ;w
  19. xcosval EQU 18    ;w
  20. xspd EQU 20    ;w
  21. zspd EQU 22    ;w
  22. mapx EQU 24    ;b
  23. mapz EQU 25    ;b
  24. whichtile EQU 26 ;b
  25. xofflight EQU 28    ;w
  26. zofflight EQU 30    ;w
  27. offlight EQU 32        ;w
  28. zlinestore EQU 34
  29. zlinedir EQU 38
  30. zposdir EQU 40
  31. zposstore EQU 42
  32. xdiststore EQU 44
  33. xdistdir EQU 46
  34. zwallfound EQU 48
  35.  
  36. xlinestore EQU 50
  37. xlinedir EQU 54
  38. xposdir EQU 56
  39. xposstore EQU 58
  40. zdiststore EQU 60
  41. zdistdir EQU 62
  42. xwallfound EQU 64
  43.  
  44.  
  45. midoffset EQU 104*4*40
  46.  
  47.  SECTION Scrn,CODE
  48. OpenLib         equ -552
  49. CloseLib        equ -414
  50.  
  51. vhposr        equ $006    
  52. vhposrl        equ $007 
  53. bltcon0        equ $40 
  54. bltcon1        equ $42
  55. bltcpt        equ $48
  56. bltbpt        equ $4c
  57. bltapt        equ $50
  58. spr0ctl        equ $142
  59. spr1ctl        equ $14a
  60. spr2ctl        equ $152
  61. spr3ctl        equ $15a
  62. spr4ctl        equ $162
  63. spr5ctl        equ $16a
  64. spr6ctl        equ $172
  65. spr7ctl        equ $17a
  66. spr0pos        equ $140
  67. spr1pos        equ $148
  68. spr2pos        equ $150
  69. spr3pos        equ $158
  70. spr4pos        equ $160
  71. spr5pos        equ $168
  72. spr6pos        equ $170
  73. spr7pos        equ $178
  74. bltdpt         equ $54
  75. bltafwm        equ $44
  76. bltalwm        equ $46
  77. bltsize         equ $58
  78. bltcmod         equ $60
  79. bltbmod         equ $62
  80. bltamod         equ $64
  81. bltdmod         equ $66
  82. diwstart        equ $8e         ; Screen hardware registers.
  83. diwstop         equ $90
  84. ddfstart        equ $92
  85. ddfstop         equ $94
  86. bplcon0         equ $100
  87. bplcon1         equ $102
  88. col0            equ $180
  89. col1            equ $182
  90. col2        equ $184
  91. col3        equ $186
  92. col4        equ $188
  93. col5        equ $18a
  94. col6        equ $18c
  95. col7        equ $18e
  96. col8            equ $190
  97. col9            equ $192
  98. col10           equ $194
  99. dmacon        equ $96
  100. dmaconr        equ $002
  101. intenar        equ $01c
  102. intena        equ $09a
  103. intreq        equ $09c
  104. intreqr        equ $01e
  105. intreqrl    equ $01f
  106. bpl1pth         equ $e0
  107. bpl1ptl         equ $e2
  108. bpl2pth        equ $e4
  109. bpl2ptl        equ $e6
  110. bpl3pth        equ $e8
  111. bpl3ptl        equ $ea
  112. bpl4pth        equ $ec
  113. bpl4ptl        equ $ee
  114. bpl5pth        equ $f0
  115. bpl5ptl        equ $f2
  116. bpl6pth        equ $f4
  117. bpl6ptl        equ $f6
  118. bpl7pth        equ $f8
  119. bpl7ptl        equ $fa
  120. bpl8pth        equ $fc
  121. bpl8ptl        equ $fe
  122. spr0pth        equ $120
  123. spr0ptl        equ $122
  124. spr1pth        equ $124
  125. spr1ptl        equ $126
  126. spr2pth        equ $128
  127. spr2ptl        equ $12a
  128. spr3pth        equ $12c
  129. spr3ptl        equ $12e
  130. spr4pth        equ $130
  131. spr4ptl        equ $132
  132. spr5pth        equ $134
  133. spr5ptl        equ $136
  134. spr6pth        equ $138
  135. spr6ptl        equ $13a
  136. spr7pth        equ $13c
  137. spr7ptl        equ $13e
  138.  
  139.  
  140. ** This waits for the blitter to finish before allowing program
  141. ** execution to continue.
  142.  
  143. WB MACRO
  144. \@bf:
  145.  btst #6,dmaconr(a6)
  146.  bne.s \@bf
  147.  ENDM
  148.  
  149. *Another version for when d6 <> dff000
  150.  
  151. WBSLOW MACRO
  152. \@bf:
  153.  btst #6,$dff000+dmaconr
  154.  bne.s \@bf
  155.  ENDM
  156.  
  157. WT MACRO
  158. \@bf:
  159.  btst #6,(a3)
  160.  bne.s \@bd
  161.  rts
  162. \@bd: 
  163.  btst #4,(a0)
  164.  beq.s \@bf
  165.  ENDM
  166.  
  167. WTNOT MACRO
  168. \@bf:
  169.  btst #6,(a3)
  170.  bne.s \@bd
  171.  rts
  172. \@bd: 
  173.  btst #4,(a0)
  174.  bne.s \@bf
  175.  ENDM
  176.  
  177. **
  178.  
  179.  include "macros.i"
  180.  include "ab3:source/defs.i"
  181.  
  182. * Load level into buffers.
  183.  clr.b doanything
  184.  move.l 4.w,a6
  185.  move.l #doslibname,a1
  186.  moveq #0,d0
  187.  jsr -552(a6)
  188.  move.l d0,doslib
  189.  
  190. ; bra noload
  191.  
  192.  move.l d0,a6
  193.  move.l #LDname,d1
  194.  move.l #1005,d2
  195.  jsr -30(a6)
  196.  move.l d0,LDhandle
  197.  
  198.  move.l doslib,a6
  199.  move.l d0,d1
  200.  move.l #LEVELDATA,d2
  201.  move.l #70000,d3
  202.  jsr -42(a6)
  203.  
  204.  move.l doslib,a6
  205.  move.l LDhandle,d1
  206.  jsr -36(a6)
  207.  
  208. ********
  209.  
  210.  move.l doslib,a6
  211.  move.l #LGname,d1
  212.  move.l #1005,d2
  213.  jsr -30(a6)
  214.  move.l d0,LGhandle
  215.  
  216.  move.l doslib,a6
  217.  move.l d0,d1
  218.  move.l #LEVELGRAPHICS,d2
  219.  move.l #30000,d3
  220.  jsr -42(a6)
  221.  
  222.  move.l doslib,a6
  223.  move.l LGhandle,d1
  224.  jsr -36(a6)
  225.  
  226. ********
  227.  
  228.  move.l doslib,a6
  229.  move.l #LCname,d1
  230.  move.l #1005,d2
  231.  jsr -30(a6)
  232.  move.l d0,LChandle
  233.  
  234.  move.l doslib,a6
  235.  move.l d0,d1
  236.  move.l #LEVELCLIPS,d2
  237.  move.l #50000,d3
  238.  jsr -42(a6)
  239.  
  240.  move.l doslib,a6
  241.  move.l LChandle,d1
  242.  jsr -36(a6)
  243.  
  244. *******
  245.  
  246. noload:
  247.  
  248. ********
  249.  
  250. ; move.l doslib,a6
  251. ; move.l #Prefsname,d1
  252. ; move.l #1005,d2
  253. ; jsr -30(a6)
  254. ; move.l d0,Prefshandle
  255.  
  256. ; move.l doslib,a6
  257. ; move.l d0,d1
  258. ; move.l #Prefsfile,d2
  259. ; move.l #50,d3
  260. ; jsr -42(a6)
  261.  
  262. ; move.l doslib,a6
  263. ; move.l Prefshandle,d1
  264. ; jsr -36(a6)
  265.  
  266. *******
  267.  
  268.  cmp.b #'s',Prefsfile+2
  269.  seq STEREO
  270.  
  271.  move.l doslib,d0
  272.  move.l d0,a1
  273.  move.l 4.w,a6
  274.  jsr CloseLib(a6)
  275.  
  276.  jmp stuff
  277. endstuff:
  278.  
  279.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  280.  move.w #$87c0,dmacon(a6)
  281.  move.w #$8020,dmacon(a6)
  282.  move.w intenar(a6),saveinters
  283.  move.w #$7fff,intena(a6)
  284.  move.w #$00ff,$dff09e
  285.  
  286. *** Put myself in supervisor mode
  287.  
  288.  move.l #blag,$80
  289.  trap #0
  290. ; move.l $6c,d0
  291. ; move.l #blag,$6c
  292. ; move.w #$8010,intreq(a6)
  293.  
  294.  rts
  295.  
  296. saveit: ds.l 10
  297. doslibname: dc.b 'dos.library',0
  298.  even
  299. doslib: dc.l 0
  300.  
  301. LDname: dc.b 'ab3:includes/tstlev.bin',0
  302.  even
  303. LDhandle: dc.l 0
  304. LGname: dc.b 'ab3:includes/tstlev.graph.bin',0
  305.  even
  306. LGhandle: dc.l 0
  307. LCname: dc.b 'ab3:includes/tstlev.clips',0
  308.  even
  309. LChandle: dc.l 0
  310.  
  311. Prefsname: dc.b 'ram:prefs',0
  312.  even
  313. Prefshandle: dc.l 0
  314.  
  315. Prefsfile:
  316.  dc.b 'k8nx'
  317.  ds.b 50
  318.  
  319.  even
  320.  
  321. blag:
  322. ; move.w #$10,intreq(a6)
  323. ; move.l d0,$6c
  324. ; move.w #$7fff,intena(a6)
  325.  
  326.  move.w #$20,$dff1dc
  327.  
  328.  move.l $6c,saveit
  329.  move.l #Chan0inter,$6c
  330.  jsr KInt_Init
  331.  
  332.  
  333.  
  334. ****************************
  335. * Initialize level
  336. ****************************
  337. * Poke all clip offsets into
  338. * correct bit of level data.
  339. ****************************
  340.  lea.l LEVELGRAPHICS,a0
  341.  move.l 12(a0),a1
  342.  add.l a0,a1
  343.  move.l a1,ZoneGraphAdds
  344.  move.l (a0),a1
  345.  add.l a0,a1
  346.  move.l a1,DoorData
  347.  move.l 4(a0),a1
  348.  add.l a0,a1
  349.  move.l a1,LiftData
  350.  move.l 8(a0),a1
  351.  add.l a0,a1
  352.  move.l a1,SwitchData
  353.  adda.w #16,a0
  354.  move.l a0,ZoneAdds
  355.  
  356.  lea.l LEVELDATA,a1
  357.  move.l 16(a1),a2
  358.  add.l a1,a2
  359.  move.l a2,Points
  360.  move.l 20(a1),a2
  361.  add.l a1,a2
  362.  move.l a2,FloorLines
  363.  move.l 24(a1),a2
  364.  add.l a1,a2
  365.  move.l a2,ObjectData
  366.  move.l 28(a1),a2
  367.  add.l a1,a2
  368.  move.l a2,PlayerShotData
  369.  move.l 32(a1),a2
  370.  add.l a1,a2
  371.  move.l a2,NastyShotData
  372.  move.l 36(a1),a2
  373.  add.l a1,a2
  374.  move.l a2,ObjectPoints  
  375.  move.l 40(a1),a2
  376.  add.l a1,a2
  377.  move.l a2,PLR1_Obj
  378.  move.l 44(a1),a2
  379.  add.l a1,a2
  380.  move.l a2,PLR2_Obj
  381.  move.w 14(a1),NumObjectPoints
  382.  
  383. ; bra noclips
  384.   
  385.  lea.l LEVELCLIPS,a2
  386.  moveq #0,d0
  387.  move.w 10(a1),d7    ;numzones
  388. assignclips:
  389.  move.l (a0)+,a3
  390.  add.l a1,a3    ; pointer to a zone
  391.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  392. dowholezone:
  393.  tst.w (a3)
  394.  blt.s nomorethiszone
  395.  tst.w 2(a3)
  396.  blt.s thisonenull
  397.  
  398.  move.l d0,d1
  399.  asr.l #1,d1
  400.  move.w d1,2(a3)
  401.  
  402. findnextclip:
  403.  cmp.w #-2,(a2,d0.l)
  404.  beq.s foundnextclip
  405.  addq.l #2,d0
  406.  bra.s findnextclip
  407. foundnextclip
  408.  addq.l #2,d0
  409.  
  410. thisonenull:
  411.  addq #8,a3 
  412.  bra.s dowholezone
  413. nomorethiszone:
  414.  dbra d7,assignclips
  415.  
  416.  lea (a2,d0.l),a2
  417.  move.l a2,CONNECT_TABLE
  418.  
  419. noclips:
  420.  
  421. * Put in addresses of glowything
  422.  
  423.  move.l red_des,a0
  424.  move.w (a0),d0
  425.  addq #1,d0
  426.  muls #6,d0
  427.  lea 2(a0,d0.w),a1
  428.  move.l red_des+4,a0
  429.  move.l a1,(a0)
  430.  move.w #0,(a1)
  431.  
  432.  move.l yellow_des,a0
  433.  move.w (a0),d0
  434.  addq #1,d0
  435.  muls #6,d0
  436.  lea 2(a0,d0.w),a1
  437.  move.l yellow_des+4,a0
  438.  move.l a1,(a0)
  439.  move.w #0,(a1)
  440.  
  441.  move.l green_des,a0
  442.  move.w (a0),d0
  443.  addq #1,d0
  444.  muls #6,d0
  445.  lea 2(a0,d0.w),a1
  446.  move.l green_des+4,a0
  447.  move.l a1,(a0)
  448.  move.w #0,(a1)
  449.  
  450.  move.l blue_des,a0
  451.  move.w (a0),d0
  452.  addq #1,d0
  453.  muls #6,d0
  454.  lea 2(a0,d0.w),a1
  455. ; move.l #protinit-750000,a6
  456.  move.l blue_des+4,a0
  457.  move.l a1,(a0)
  458.  move.w #0,(a1)
  459.  
  460.  
  461. ************************************
  462.  
  463.  cmp.b #'k',Prefsfile
  464.  bne.s nkb
  465.  st PLR1KEYS
  466.  clr.b PLR1PATH
  467.  clr.b PLR1MOUSE
  468.  clr.b PLR1JOY
  469. nkb:
  470.  cmp.b #'m',Prefsfile
  471.  bne.s nmc
  472.  clr.b PLR1KEYS
  473.  clr.b PLR1PATH
  474.  st PLR1MOUSE
  475.  clr.b PLR1JOY
  476. nmc:
  477.  cmp.b #'j',Prefsfile
  478.  bne.s njc
  479.  clr.b PLR1KEYS
  480.  clr.b PLR1PATH
  481.  clr.b PLR1MOUSE
  482.  st PLR1JOY
  483. njc:
  484.  
  485.  clr.b PLR1_StoodInTop
  486.  move.l #playerheight,PLR1s_height
  487.  
  488.  move.l #empty,pos1LEFT
  489.  move.l #empty,pos2LEFT
  490.  move.l #empty,pos1RIGHT
  491.  move.l #empty,pos2RIGHT
  492.  move.l #emptyend,Samp0endLEFT
  493.  move.l #emptyend,Samp1endLEFT
  494.  move.l #emptyend,Samp0endRIGHT
  495.  move.l #emptyend,Samp1endRIGHT
  496.  
  497.  move.l #nullspr,d0
  498.  move.w d0,s4l
  499.  move.w d0,s5l
  500.  move.w d0,s6l
  501.  move.w d0,s7l
  502.  swap d0
  503.  move.w d0,s4h
  504.  move.w d0,s5h
  505.  move.w d0,s6h
  506.  move.w d0,s7h 
  507.  
  508.  move.l #nullline,d0
  509.  move.w d0,n1l
  510.  swap d0
  511.  move.w d0,n1h
  512.  
  513.  move.l #Panel,d0
  514.  move.w d0,p1l
  515.  swap d0
  516.  move.w d0,p1h
  517.  move.l #Panel+40,d0
  518.  move.w d0,p2l
  519.  swap d0
  520.  move.w d0,p2h
  521.  move.l #Panel+40*2,d0
  522.  move.w d0,p3l
  523.  swap d0
  524.  move.w d0,p3h
  525.  move.l #Panel+40*3,d0
  526.  move.w d0,p4l
  527.  swap d0
  528.  move.w d0,p4h
  529.  move.l #Panel+40*4,d0
  530.  move.w d0,p5l
  531.  swap d0
  532.  move.w d0,p5h
  533.  move.l #Panel+40*5,d0
  534.  move.w d0,p6l
  535.  swap d0
  536.  move.w d0,p6h
  537.  move.l #Panel+40*6,d0
  538.  move.w d0,p7l
  539.  swap d0
  540.  move.w d0,p7h
  541.  move.l #Panel+40*7,d0
  542.  move.w d0,p8l
  543.  swap d0
  544.  move.w d0,p8h
  545.  
  546. *******************************
  547. * TIMER SCREEN SETUP
  548. ; move.l #TimerScr,d0
  549. ; move.w d0,p1l
  550. ; swap d0
  551. ; move.w d0,p1h
  552. ; move.w #$1201,Panelcon
  553.  
  554.  move.l #borders,d0
  555.  move.w d0,s0l
  556.  swap d0
  557.  move.w d0,s0h
  558.  move.l #borders+2592,d0
  559.  move.w d0,s1l
  560.  swap d0
  561.  move.w d0,s1h
  562.  move.l #borders+2592*2,d0
  563.  move.w d0,s2l
  564.  swap d0
  565.  move.w d0,s2h
  566.  move.l #borders+2592*3,d0
  567.  move.w d0,s3l
  568.  swap d0
  569.  move.w d0,s3h
  570.  
  571.  move.w #52*256+64,borders
  572.  move.w #212*256+0,borders+8
  573.  move.w #52*256+64,borders+2592
  574.  move.w #212*256+128,borders+8+2592
  575.  move.w #52*256+192,borders+2592*2
  576.  move.w #212*256+0,borders+8+2592*2
  577.  move.w #52*256+192,borders+2592*3
  578.  move.w #212*256+128,borders+8+2592*3
  579.  
  580.  move.l #FacePlace,d0
  581.  move.w d0,f1l
  582.  swap d0
  583.  move.w d0,f1h
  584.  move.l #FacePlace+32*24,d0
  585.  move.w d0,f2l
  586.  swap d0
  587.  move.w d0,f2h
  588.  move.l #FacePlace+32*24*2,d0
  589.  move.w d0,f3l
  590.  swap d0
  591.  move.w d0,f3h
  592.  move.l #FacePlace+32*24*3,d0
  593.  move.w d0,f4l
  594.  swap d0
  595.  move.w d0,f4h
  596.  move.l #FacePlace+32*24*4,d0
  597.  move.w d0,f5l
  598.  swap d0
  599.  move.w d0,f5h
  600.  
  601.  move.l #PanelCop,d0
  602.  move.w d0,pcl1
  603.  move.w d0,pcl2
  604.  swap d0
  605.  move.w d0,pch1
  606.  move.w d0,pch2
  607.  
  608.  move.l #bigfield,d0
  609.  move.w d0,ocl
  610.  swap d0
  611.  move.w d0,och
  612.  
  613.  bset.b #1,$bfe001
  614.  
  615.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  616.  move.w #$00ff,$dff09e
  617.  
  618. ; move.l #Blurbfield,$dff080
  619.  
  620.  move.w #0,d0
  621.  
  622.  move.l #scrn,d0
  623.  move.w d0,pl1l
  624.  swap d0
  625.  move.w d0,pl1h
  626.  
  627.  move.l #scrn+40,d0
  628.  move.w d0,pl2l
  629.  swap d0
  630.  move.w d0,pl2h
  631.  
  632.  move.l #scrn+80,d0
  633.  move.w d0,pl3l
  634.  swap d0
  635.  move.w d0,pl3h
  636.  
  637.  move.l #scrn+120,d0
  638.  move.w d0,pl4l
  639.  swap d0
  640.  move.w d0,pl4h
  641.  
  642.  move.l #scrn+160,d0
  643.  move.w d0,pl5l
  644.  swap d0
  645.  move.w d0,pl5h
  646.  
  647.  move.l #scrn+200,d0
  648.  move.w d0,pl6l
  649.  swap d0
  650.  move.w d0,pl6h
  651.  
  652.  move.l #scrn+240,d0
  653.  move.w d0,pl7l
  654.  swap d0
  655.  move.w d0,pl7h
  656.  
  657.  move.l #healthpal,a5
  658.  move.l #colbars,a0
  659.  move.l #colbars2,a2
  660.  move.w #scrheight-1,d0
  661.  move.l #0,d6
  662.  move.w #0,d3
  663.  move.w #$2bdf,startwait
  664.  move.w #$2d01,endwait
  665. fillcop
  666.  move.w #$180,d1
  667.  
  668.  move.l a0,a1
  669.  move.l a2,a3
  670.  move.w #$10c,(a1)+
  671.  move.w #$10c,(a3)+
  672.  move.w d3,(a1)+
  673.  move.w d3,(a3)+
  674.  eor.w #$8000,d3
  675.  
  676.  move.w #$106,(a1)+
  677.  move.w #$106,(a3)+
  678.  move.w #$2c42,d5
  679.  or.w d3,d5
  680.  and.w #$fffe,d5
  681.  move.w d5,(a1)+
  682.  move.w d5,(a3)+
  683.  bsr do32
  684.  
  685.  move.w #$106,(a1)+
  686.  move.w #$106,(a3)+
  687.  move.w #$4c42,d5
  688.  or.w d3,d5
  689.  and.w #$fffe,d5
  690.  move.w d5,(a1)+
  691.  move.w d5,(a3)+
  692.  bsr do32
  693.  
  694.  move.w #$106,(a1)+
  695.  move.w #$106,(a3)+
  696.  move.w #$6c42,d5
  697.  or.w d3,d5
  698.  and.w #$fffe,d5
  699.  move.w d5,(a1)+
  700.  move.w d5,(a3)+
  701.  bsr do32
  702.  
  703. **********************************
  704.  
  705.  cmp.b #'s',option
  706.  bra.s smallscrn
  707.  
  708.  move.w startwait,(a1)+
  709.  move.w #$fffe,(a1)+
  710.  move.w endwait,(a1)+
  711.  move.w #$ff00,(a1)+
  712.  move.w startwait,(a3)+
  713.  move.w #$fffe,(a3)+
  714.  move.w endwait,(a3)+
  715.  move.w #$ff00,(a3)+
  716.  
  717.  
  718.  add.w #$300,startwait
  719.  add.w #$300,endwait
  720.  
  721. smallscrn: 
  722.  
  723.  move.l #$1060c42,(a1)+
  724.  move.l #$1060c42,(a3)+
  725.  move.w #$19e,(a1)+
  726.  move.w (a5),(a1)+
  727.  move.w #$19e,(a3)+
  728.  move.w (a5)+,(a3)+
  729.  
  730. **********************************
  731.  
  732.  adda.w #104*4,a0
  733.  adda.w #104*4,a2
  734.  
  735.  dbra d0,fillcop
  736.  
  737. **********************************
  738.  cmp.b #'s',option
  739.  bra smallnotlarge
  740.  move.w #$38,fetchstart
  741.  move.w #$b8,fetchstop
  742.  move.w #$2c81,winstart
  743.  move.w #$2cc1,winstop
  744.  move.w #-40,modulo
  745.  move.w #-40,modulo+4
  746.  
  747.  move.l #scrn+40,a0
  748.  move.l #scrn+160,a1
  749.  move.l #scrn+280,a2
  750.  move.l #scrntab,a3
  751.  move.w #319,d7    ; counter
  752.  move.w #0,d1    ; xpos
  753. plotscrnloop:
  754.  move.b (a3)+,d0
  755.  move.w d1,d2
  756.  asr.w #3,d2
  757.  move.b d1,d3
  758.  not.b d3
  759.  bclr.b d3,-40(a0,d2.w)
  760.  bclr.b d3,(a0,d2.w)
  761.  bclr.b d3,40(a0,d2.w)
  762.  bclr.b d3,-40(a1,d2.w)
  763.  bclr.b d3,(a1,d2.w)
  764.  bclr.b d3,40(a1,d2.w)
  765.  bclr.b d3,-40(a2,d2.w)
  766.  btst #0,d0
  767.  beq.s nobp1
  768.  bset.b d3,-40(a0,d2.w)
  769. nobp1:
  770.  btst #1,d0
  771.  beq.s nobp2
  772.  bset.b d3,(a0,d2.w)
  773. nobp2:
  774.  btst #2,d0
  775.  beq.s nobp3
  776.  bset.b d3,40(a0,d2.w)
  777. nobp3:
  778.  btst #3,d0
  779.  beq.s nobp4
  780.  bset.b d3,-40(a1,d2.w)
  781. nobp4:
  782.  btst #4,d0
  783.  beq.s nobp5
  784.  bset.b d3,(a1,d2.w)
  785. nobp5:
  786.  btst #5,d0
  787.  beq.s nobp6
  788.  bset.b d3,40(a1,d2.w)
  789. nobp6:
  790.  btst #6,d0
  791.  beq.s nobp7
  792.  bset.b d3,-40(a2,d2.w)
  793. nobp7:
  794.  
  795.  addq #1,d1
  796.  
  797.  dbra d7,plotscrnloop
  798.  
  799. smallnotlarge:
  800.  
  801. **********************************
  802.  
  803. ****************************
  804.  jsr INITPLAYER
  805. ; bsr initobjpos
  806. ****************************
  807.  
  808.  
  809.  move.l #$dff000,a6
  810.  
  811.  move.l #null,$dff0a0
  812.  move.w #100,$dff0a4
  813.  move.w #443,$dff0a6
  814.  move.w #63,$dff0a8
  815.  
  816.  move.l #null2,$dff0b0
  817.  move.w #100,$dff0b4
  818.  move.w #443,$dff0b6
  819.  move.w #63,$dff0b8
  820.  
  821.  move.l #null4,$dff0c0
  822.  move.w #100,$dff0c4
  823.  move.w #443,$dff0c6
  824.  move.w #63,$dff0c8
  825.  
  826.  move.l #null3,$dff0d0
  827.  move.w #100,$dff0d4
  828.  move.w #443,$dff0d6
  829.  move.w #63,$dff0d8
  830.  
  831.  move.l #tab,a1
  832.  move.w #64,d7
  833.  move.w #0,d6
  834. outerlop
  835.  move.l #pretab,a0
  836.  move.w #255,d5
  837. scaledownlop:
  838.  move.b (a0)+,d0
  839.  ext.w d0
  840.  ext.l d0
  841.  muls d6,d0
  842.  asr.l #6,d0
  843.  move.b d0,(a1)+
  844.  dbra d5,scaledownlop
  845.  addq #1,d6
  846.  dbra d7,outerlop
  847.  
  848.  move.l #$dff000,a6
  849.  
  850.  move.w #$c018,intena(a6)
  851.  
  852.  move.w #$f,dmacon(a6)
  853.  move.w #$820f,dmacon(a6)
  854.  
  855. ; bsr protinit
  856.  
  857.  bsr FullEnergy
  858.  move.w #63,OldAmmo
  859.  move.w #0,Ammo
  860.  bsr AmmoBar
  861.  move.w #0,OldAmmo
  862.  
  863.  move.b #1,PLR1_GunDamage
  864.  move.b #1,PLR2_GunDamage
  865.  move.w #3,PLR1_GunNoise
  866.  move.w #3,PLR2_GunNoise
  867.  
  868.  move.w #10,GunData    ; 10 shots pistol
  869.  st GunData+7
  870.  clr.b GunData+16+7
  871.  clr.w GunData+16
  872.  move.b #0,GunSelected
  873.  
  874. ; move.w #$20,$1dc(a6)
  875.  
  876.  move.w #$0,$dff034
  877.  move.w #0,Conditions
  878.  move.l #KeyMap,a5
  879.  clr.b $45(a5)
  880.  
  881.  move.l #ingame,mt_data
  882.  clr.b UseAllChannels
  883.  
  884. ; cmp.b #'b',Prefsfile+3
  885. ; bne.s .noback
  886. ; jsr mt_init
  887. ;.noback:
  888. ;
  889. ; clr.b CHANNELDATA
  890. ; clr.b CHANNELDATA+8
  891. ; clr.b CHANNELDATA+16
  892. ; clr.b CHANNELDATA+24
  893. ;
  894. ; cmp.b #'b',Prefsfile+3
  895. ; bne.s noreserve
  896. ;
  897. ; st CHANNELDATA
  898. ; st CHANNELDATA+8
  899. ; st CHANNELDATA+16
  900. ; st CHANNELDATA+24
  901. ;noreserve: 
  902.  
  903. ; st CHANNELDATA
  904. ; st CHANNELDATA+8
  905.  
  906.  move.l #bass,pos0LEFT
  907.  move.l #bassend,Samp0endLEFT
  908.  move.l #playerheight,PLR1s_targheight
  909.  move.l #playerheight,PLR1s_height
  910.  
  911.  move.b #%11011000,$bfd200
  912.  move.b #%00010000,$bfd000
  913. waitloop:
  914.  btst.b #4,$bfd000
  915.  bne.s waitloop
  916.  move.b #%11000000,$bfd200
  917.  
  918.  st doanything
  919. lop: 
  920.  
  921.  move.l #$dff000,a6
  922.  
  923.  move.w hitcol,d0
  924.  beq.s nofadedownhc
  925.  sub.w #$100,d0
  926.  move.w d0,hitcol
  927.  move.w d0,hitcol2
  928. nofadedownhc:
  929.  
  930.  move.l drawpt,d0
  931.  move.l olddrawpt,drawpt
  932.  move.l d0,olddrawpt
  933.  move.l d0,$dff084
  934.  move.l drawpt,a3
  935.  adda.w #10,a3
  936.  move.l a3,frompt
  937.  add.l #104*4*40,a3
  938.  move.l a3,midpt
  939.  
  940. ; clr.b OKTOPROCEED
  941.  
  942. ;waitfortop:
  943. ; btst.b #0,intreqrl(a6)
  944. ; beq waitfortop
  945. ; move.w #$1,intreq(a6)
  946.  
  947.  JSR INITREC
  948.  JSR RECEIVE
  949.  
  950.  
  951. ;waitforok:
  952. ; tst.b OKTOPROCEED
  953. ; beq.s waitforok
  954.  
  955. ; move.l #Chan0inter,$6c
  956.  
  957.  move.b SpaceTapped,SPCTAP
  958.  clr.b SpaceTapped
  959.  
  960.  move.l waterpt,a0
  961.  move.l (a0)+,watertouse
  962.  cmp.l #endwaterlist,a0
  963.  blt.s okwat
  964.  move.l #waterlist,a0
  965. okwat:
  966.  move.l a0,waterpt
  967.  
  968.  add.w #640,wtan
  969.  and.w #8191,wtan
  970.  add.w #1,wateroff
  971.  and.w #63,wateroff
  972.  
  973.  move.w FramesToDraw,TempFrames
  974.  move.w #0,FramesToDraw
  975.  
  976.  lea GunData,a6
  977.  moveq #0,d0
  978.  move.b GunSelected,d0
  979.  add.w d0,d0
  980.  lea (a6,d0.w*8),a6
  981.  move.w (a6),Ammo
  982.  
  983.  JSR INITTIMER
  984.  
  985.  bsr PLR1_Control
  986.  
  987.  
  988. ; bsr PLR2_Control
  989.  
  990.  
  991.  move.l ObjectData,a5
  992.  move.l ObjectPoints,a1
  993.  move.l #BUFFER+12,a2
  994.  moveq #0,d7
  995. putinobj:
  996.  move.l (a2)+,d0
  997.  cmp.l #$80000000,d0
  998.  beq.s donelastobj
  999.  move.w d7,(a5)
  1000.  move.w d0,4(a1)
  1001.  swap d0
  1002.  move.w d0,(a1)
  1003.  addq #8,a1
  1004.  move.w (a2)+,4(a5)
  1005.  moveq #0,d0
  1006.  move.b (a2)+,d0
  1007.  move.w d0,12(a5)
  1008.  move.b (a2)+,ObjInTop(a5)
  1009.  move.w (a2)+,6(a5)
  1010.  move.w (a2)+,14(a5)
  1011.  move.l (a2)+,8(a5)
  1012.  st worry(a5)
  1013.  adda.w #64,a5
  1014.  addq #1,d7
  1015.  bra.s putinobj
  1016.  
  1017. donelastobj:
  1018.  move.w #-1,(a5)
  1019.  
  1020. ******************************************
  1021. ; jsr SLAVEANIM
  1022.  bsr EnergyBar
  1023.  bsr AmmoBar
  1024.  clr.b PLR1_clicked
  1025.  clr.b PLR2_clicked
  1026. ******************************************
  1027.  
  1028.  move.l ObjectPoints,a1
  1029.  move.l PLR1_Obj,a0
  1030.  move.b damagetaken(a0),d2
  1031.  beq notbeenshot
  1032.  move.w #$f00,hitcol
  1033.  move.w #$f00,hitcol2
  1034.  ext.w d2
  1035.  sub.w d2,Energy
  1036.  move.b #0,damagetaken(a0)
  1037.  move.l #Cheese,FacesPtr
  1038.  move.w #3,Cheese
  1039.  move.w #-1,FacesCounter
  1040.  
  1041.  movem.l d0-d7/a0-a6,-(a7)
  1042.  move.w #19,Samplenum
  1043.  clr.b notifplaying
  1044.  move.w #0,Noisex
  1045.  move.w #0,Noisez
  1046.  move.w #100,Noisevol
  1047.  jsr MakeSomeNoise
  1048.  
  1049.  movem.l (a7)+,d0-d7/a0-a6
  1050.  
  1051. notbeenshot:
  1052.  move.b Energy+1,numlives(a0)
  1053.  
  1054.  move.w (a0),d0
  1055.  move.l PLR1_xoff,(a1,d0.w*8)
  1056.  move.l PLR1_zoff,4(a1,d0.w*8)
  1057.  move.l PLR1_Roompt,a1
  1058.  
  1059.  move.w (a1),12(a0)
  1060.  move.w (a1),d2
  1061.  move.l #ZoneBrightTable,a1
  1062.  move.l (a1,d2.w*4),d2
  1063.  tst.b PLR1_StoodInTop
  1064.  bne.s .okinbott
  1065.  swap d2
  1066. .okinbott:
  1067.  
  1068.  move.w d2,2+128(a0)
  1069.  
  1070.  move.l PLR1_yoff,d0
  1071.  asr.l #7,d0
  1072.  move.w d0,4(a0)
  1073.  
  1074.  move.b PLR1_StoodInTop,ObjInTop+128(a0)
  1075.  
  1076.  move.w PLR1_sinval,d4
  1077.  muls #100,d4
  1078.  move.w PLR1_cosval,d5
  1079.  muls #100,d5
  1080.  
  1081.  move.b GunSelected,d0
  1082.  asl.b #2,d0
  1083.  add.b GunFrame,d0
  1084.  move.b d0,11+128(a0)
  1085.  
  1086.  tst.b GunFrame
  1087.  beq.s .noless
  1088.  subq.b #1,GunFrame
  1089. .noless: 
  1090.  
  1091.  move.l ObjectPoints,a1
  1092.  move.w 128(a0),d0
  1093.  move.w 12(a0),12+128(a0)
  1094.  move.l PLR1_xoff,d1
  1095.  add.l d4,d1
  1096.  move.l d1,(a1,d0.w*8)
  1097.  move.l PLR1_zoff,d1
  1098.  add.l d5,d1
  1099.  move.l d1,4(a1,d0.w*8)
  1100.  move.w 4(a0),d0
  1101.  add.w #16,d0
  1102.  move.w d0,4+128(a0)
  1103.  move.w #$2010,6+128(a0)
  1104.  
  1105.  
  1106.  
  1107.  move.w #0,scaleval
  1108.  
  1109.  move.l PLR1_xoff,xoff
  1110.  move.l PLR1_yoff,yoff
  1111.  move.l PLR1_zoff,zoff
  1112.  move.w PLR1_angpos,angpos
  1113.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1114.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1115.  move.l PLR1_Roompt,Roompt
  1116.  
  1117.  move.w #0,leftclip
  1118.  move.w #96,rightclip
  1119.  move.w #0,deftopclip
  1120.  move.w #79,defbotclip
  1121.  move.w #0,topclip
  1122.  move.w #79,botclip
  1123. ; sub.l #10*104*4,frompt
  1124. ; sub.l #10*104*4,midpt
  1125.  
  1126. * Subroom loop
  1127.  
  1128.  bsr DrawDisplay
  1129.  
  1130.  bra noglass
  1131.  
  1132. ************************************
  1133. * Test glass routine:
  1134. ************************************
  1135.  
  1136.  move.l #WorkSpace,a0
  1137.  move.l frompt,a2
  1138.  move.w #104*4,d3
  1139.  move.w #1,d6
  1140. ribl
  1141.  move.w #31,d0
  1142. readinto
  1143.  move.w #15,d1
  1144.  move.l a2,a1
  1145. readintodown
  1146.  move.w (a1),(a0)+
  1147.  adda.w d3,a1
  1148.  move.w (a1),(a0)+
  1149.  adda.w d3,a1
  1150.  move.w (a1),(a0)+
  1151.  adda.w d3,a1
  1152.  move.w (a1),(a0)+
  1153.  adda.w d3,a1
  1154.  dbra d1,readintodown
  1155. ; add.w #256-128,a0
  1156.  addq #4,a2
  1157.  dbra d0,readinto
  1158.  addq #4,a2
  1159.  dbra d6,ribl
  1160.  
  1161. * We now have the screen in a buffer
  1162. * for squidging.
  1163.  
  1164.  move.l frompt,a2
  1165.  move.l #WorkSpace,a0
  1166.  move.l glassballpt,a3
  1167.  move.w #$fff,d7
  1168.  move.w #1,d6 
  1169. rfbl:
  1170.  move.w #31,d0
  1171. readoutfrom:
  1172.  move.w #15,d1
  1173.  move.l a2,a1
  1174.  moveq.w #0,d5
  1175. readoutfromdown:
  1176.  move.w (a3)+,d2
  1177.  beq.s nono1
  1178. ; add.w d5,d2
  1179.  move.w (a0,d2.w*2),d2
  1180.  and.w d7,d2
  1181.  move.w d2,(a1)
  1182. nono1:
  1183.  addq #1,d5
  1184.  add.w d3,a1
  1185.  move.w (a3)+,d2
  1186.  beq.s nono2
  1187. ; add.w d5,d2
  1188.  move.w (a0,d2.w*2),d2
  1189.  and.w d7,d2
  1190.  move.w d2,(a1)
  1191. nono2:
  1192.  addq #1,d5
  1193.  add.w d3,a1
  1194.  move.w (a3)+,d2
  1195.  beq.s nono3
  1196. ; add.w d5,d2
  1197.  move.w (a0,d2.w*2),d2
  1198.  and.w d7,d2
  1199.  move.w d2,(a1)
  1200. nono3:
  1201.  addq #1,d5
  1202.  add.w d3,a1
  1203.  move.w (a3)+,d2
  1204.  beq.s nono4
  1205. ; add.w d5,d2
  1206.  move.w (a0,d2.w*2),d2
  1207.  and.w d7,d2
  1208.  move.w d2,(a1)
  1209. nono4:
  1210.  addq #1,d5
  1211.  add.w d3,a1
  1212.  dbra d1,readoutfromdown
  1213.  addq #4,a2
  1214. ; adda.w #128,a0
  1215.  dbra d0,readoutfrom
  1216.  addq #4,a2
  1217.  dbra d6,rfbl
  1218.  
  1219.  move.l glassballpt,d0
  1220.  add.l #64*64*2,d0
  1221.  cmp.l #endglass,d0
  1222.  blt notoffglass
  1223.  move.l #glassball,d0
  1224. notoffglass
  1225.  move.l d0,glassballpt
  1226.  
  1227. noglass:
  1228.  
  1229.  
  1230. ; move.l #brightentab,a0
  1231. ; move.l frompt,a3
  1232. ; adda.w #(4*33)+(104*4*20),a3
  1233. ; move.w #20,d7
  1234. ; move.w #20,d6
  1235. ;horl:
  1236. ; move.w d6,d5
  1237. ; move.l a3,a1
  1238. ;vertl
  1239. ; move.w (a1),d0
  1240. ; move.w (a0,d0.w*2),(a1)
  1241. ; addq #4,a1
  1242. ; dbra d5,vertl
  1243. ; adda.w #104*4,a3
  1244. ; dbra d7,horl
  1245.  
  1246.  move.l #$dff000,a6
  1247.  
  1248. ; move.w #$300,col0(a6)
  1249.  
  1250.  move.l #KeyMap,a5
  1251.  tst.b $45(a5)
  1252.  beq.s noend
  1253.  
  1254.  bra endnomusic
  1255. noend:
  1256.  
  1257.  tst.w Energy
  1258. ; bgt .noend
  1259. ; cmp.b #'i',option+4
  1260. ; bne end
  1261. ; move.w #10,Energy
  1262. ;.noend:
  1263.  
  1264.  move.l SwitchData,a0
  1265.  tst.b 24+8(a0)
  1266.  bne end
  1267.   
  1268.  JSR STOPTIMER
  1269.  
  1270.  bra lop
  1271.  
  1272. ***************************************************************************
  1273. ***************************************************************************
  1274. ****************** End of Main Loop here ********************************** 
  1275. ***************************************************************************
  1276. ***************************************************************************
  1277.  
  1278.  include "SERIAL_NIGHTMARE"
  1279.  
  1280. GunSelected: dc.b 0
  1281.  even
  1282.  
  1283.  
  1284.  
  1285. GunData:
  1286. ; 0=Pistol 1=Big Gun
  1287. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  1288. ; VISIBLE/INSTANT (0/FF)
  1289. ; damage,gotgun(b)
  1290. ; Delay (w)
  1291.  
  1292.  dc.w 0
  1293.  dc.b 1,3
  1294.  dc.b 20
  1295.  dc.b -1
  1296.  dc.b 1,$ff
  1297.  dc.w 5,0,0,0
  1298.  
  1299.  dc.w 0
  1300.  dc.b 1,1
  1301.  dc.b 40
  1302.  dc.b 0
  1303.  dc.b 4,0
  1304.  dc.w 10,0,0,0
  1305.  
  1306.  dc.w 0
  1307.  dc.b 1,9
  1308.  dc.b 5
  1309.  dc.b 0
  1310.  dc.b 10,0
  1311.  dc.w 50,0,0,0
  1312.  
  1313. protA: dc.w 0
  1314.  
  1315. Path:
  1316. ; incbin "testpath"
  1317. endpath:
  1318. pathpt: dc.l Path
  1319.  
  1320. PLR1KEYS: dc.b 0
  1321. PLR1PATH: dc.b 0
  1322. PLR1MOUSE: dc.b -1
  1323. PLR1JOY: dc.b 0
  1324.  
  1325.  even
  1326.  
  1327. Bobble: dc.w 0
  1328. xwobble: dc.l 0
  1329. xwobxoff: dc.w 0
  1330. xwobzoff: dc.w 0
  1331.  
  1332. PLR1_Control:
  1333.  
  1334. ; Take a snapshot of everything.
  1335.  
  1336. ; move.l PLR1_xoff,d2
  1337. ; move.l d2,PLR1_oldxoff
  1338. ; move.l d2,oldx
  1339. ; move.l PLR1_zoff,d3
  1340. ; move.l d3,PLR1_oldzoff
  1341. ; move.l d3,oldz
  1342. ; move.l PLR1s_xoff,d0
  1343. ; move.l d0,PLR1_xoff
  1344. ; move.l d0,newx
  1345. ; move.l PLR1s_zoff,d1
  1346. ; move.l d1,newz
  1347. ; move.l d1,PLR1_zoff
  1348.  
  1349.  move.w BUFFER,PLR1_xoff
  1350.  move.w BUFFER+2,PLR1_zoff
  1351.  move.l BUFFER+4,PLR1_yoff
  1352.  move.b BUFFER+8,PLR1_StoodInTop
  1353.  moveq #0,d0
  1354.  move.b BUFFER+9,d0
  1355.  move.l ZoneAdds,a0
  1356.  move.l (a0,d0.w*4),a0
  1357.  add.l #LEVELDATA,a0
  1358.  move.l a0,PLR1_Roompt
  1359.  move.w BUFFER+10,d0
  1360.  move.w d0,PLR1_angpos
  1361.  move.l #SineTable,a2
  1362.  move.w (a2,d0.w),PLR1_sinval
  1363.  lea 2048(a2),a2
  1364.  move.w (a2,d0.w),PLR1_cosval
  1365.  
  1366.  move.l PLR1s_height,PLR1_height
  1367.  
  1368. ; sub.l d2,d0
  1369. ; sub.l d3,d1
  1370. ; move.l d0,xdiff
  1371. ; move.l d1,zdiff
  1372. ; move.w PLR1s_sinval,PLR1_sinval
  1373. ; move.w PLR1s_cosval,PLR1_cosval
  1374. ; move.w PLR1s_angpos,PLR1_angpos
  1375. ; move.l PLR1s_yoff,d0
  1376. ; move.l #SineTable,a1
  1377. ; move.w Bobble,d1
  1378. ; move.w (a1,d1.w),d1
  1379. ; move.w d1,d3
  1380. ; ble.s notnegative
  1381. ; neg.w d1
  1382. ;notnegative:
  1383. ; add.w #16384,d1
  1384. ; asr.w #5,d1
  1385. ; move.w d1,d2
  1386. ; add.w d1,d1
  1387. ; add.w d2,d1
  1388. ; ext.l d1
  1389. ; add.l d1,d0
  1390.  
  1391. ; asr.w #6,d3
  1392. ; ext.l d3
  1393. ; move.l d3,xwobble
  1394. ; move.w PLR1_sinval,d1
  1395. ; muls d3,d1
  1396. ; move.w PLR1_cosval,d2
  1397. ; muls d3,d2
  1398. ; swap d1
  1399. ; swap d2
  1400. ; asr.w #7,d1
  1401. ; move.w d1,xwobxoff
  1402. ; asr.w #7,d2
  1403. ; neg.w d2
  1404. ; move.w d2,xwobzoff
  1405.  
  1406.  
  1407. ; move.l d0,PLR1_yoff
  1408. ; move.l d0,newy
  1409. ; move.l d0,oldy
  1410. ; move.l PLR1_height,thingheight
  1411. ; move.l #40*256,StepUpVal
  1412. ; move.l #$1000000,StepDownVal
  1413.  
  1414. ; move.l PLR1_Roompt,objroom
  1415. ; move.w #%100000000,wallflags
  1416. ; move.b PLR1_StoodInTop,StoodInTop
  1417.  
  1418. ; bsr MoveObject
  1419. ; move.b StoodInTop,PLR1_StoodInTop
  1420. ; move.w #0,wallflags
  1421. ; move.l objroom,PLR1_Roompt
  1422. ; move.w newx,PLR1_xoff
  1423. ; move.w newz,PLR1_zoff
  1424. ; move.l PLR1_xoff,PLR1s_xoff
  1425. ; move.l PLR1_zoff,PLR1s_zoff
  1426.  
  1427.  move.l PLR1_Roompt,a0
  1428.  
  1429.  move.l ToZoneFloor(a0),d0
  1430.  tst.b PLR1_StoodInTop
  1431.  beq.s notintop
  1432.  move.l ToUpperFloor(a0),d0
  1433. notintop:
  1434.  
  1435.  move.l ToZoneRoof(a0),SplitHeight
  1436.  
  1437.  adda.w #ToZonePts,a0
  1438.  sub.l PLR1_height,d0
  1439.  move.l d0,PLR1s_tyoff
  1440.  
  1441. ; move.l (a0),a0        ; jump to viewpoint list
  1442.  * A0 is pointing at a pointer to list of points to rotate
  1443.  move.w (a0)+,d1
  1444.  ext.l d1
  1445.  add.l PLR1_Roompt,d1
  1446.  move.l d1,PLR1_PointsToRotatePtr
  1447.  tst.w (a0)+
  1448.  beq.s nobackgraphics
  1449.  move.l a0,-(a7)
  1450.  jsr putinbackdrop 
  1451.  move.l (a7)+,a0
  1452. nobackgraphics:
  1453.  move.l a0,PLR1_ListOfGraphRooms
  1454.  
  1455. *****************************************************
  1456.  
  1457.  rts
  1458.  
  1459. KeyMap: ds.b 256
  1460.  
  1461. PLR2_Control:
  1462.  move.l #SineTable,a0
  1463.  
  1464.  bsr turnleftright
  1465.  
  1466.  move.w PLR2_angspd,d1
  1467.  move.w PLR2_angpos,d0
  1468.  move.w (a0,d0.w),PLR2_sinval
  1469.  adda.w #2048,a0
  1470.  move.w (a0,d0.w),PLR2_cosval
  1471.  
  1472.  move.l PLR2_xspdval,d6
  1473.  move.l PLR2_zspdval,d7
  1474.  
  1475.  move.w PLR2_xoff,oldxoff
  1476.  move.w PLR2_zoff,oldzoff
  1477.  
  1478.  neg.l d6
  1479.  ble.s .nobug1
  1480.  asr.l #1,d6
  1481.  add.l #1,d6
  1482.  bra.s .bug1
  1483. .nobug1
  1484.  asr.l #1,d6
  1485. .bug1:
  1486.  
  1487. ; beq.s goinnowhere
  1488. ; blt.s goinfor
  1489. ; cmp.l #4*65536,d6
  1490. ; ble.s goinnowhere
  1491. ; move.l #4*65536,d6
  1492. ;goinfor:
  1493. ; cmp.l #-4*65536,d6
  1494. ; bge.s goinnowhere
  1495. ; move.l #-4*65536,d6
  1496. ;goinnowhere:
  1497.  
  1498.  neg.l d7
  1499.  ble.s .nobug2
  1500.  asr.l #1,d7
  1501.  add.l #1,d7
  1502.  bra.s .bug2
  1503. .nobug2
  1504.  asr.l #1,d7
  1505. .bug2: 
  1506.  
  1507. ; beq.s goinnowhere2
  1508. ; blt.s goinfor2
  1509. ; cmp.l #4*65536,d7
  1510. ; ble.s goinnowhere2
  1511. ; move.l #4*65536,d7
  1512. ;goinfor2:
  1513. ; cmp.l #-4*65536,d7
  1514. ; bge.s goinnowhere2
  1515. ; move.l #-4*65536,d7
  1516. ;goinnowhere2:
  1517.  
  1518.  move.w PLR2_sinval,d1
  1519.  move.w PLR2_cosval,d2
  1520.  move.w PLR2_ForwardSpd,d3
  1521.  
  1522.  muls d3,d2
  1523.  muls d3,d1
  1524.  
  1525.  sub.l d1,d6
  1526.  sub.l d2,d7
  1527.  add.l PLR2_pushx,d6
  1528.  add.l PLR2_pushz,d7 
  1529.  add.l d6,PLR2_xspdval
  1530.  add.l d7,PLR2_zspdval
  1531.  move.l PLR2_xspdval,d6
  1532.  move.l PLR2_zspdval,d7
  1533.  add.l d6,PLR2_xoff
  1534.  add.l d7,PLR2_zoff
  1535.  
  1536.  move.w PLR2_xoff,newx
  1537.  move.w PLR2_zoff,newz
  1538.  move.w oldxoff,oldx
  1539.  move.w oldzoff,oldz
  1540.  move.l PLR2_xspdval,xdiff
  1541.  move.l PLR2_zspdval,zdiff
  1542.  move.l PLR2_Roompt,objroom
  1543.  move.w #%100000000,wallflags
  1544.  bsr MoveObject
  1545.  move.w #0,wallflags
  1546.  move.l objroom,PLR2_Roompt
  1547.  move.w newx,PLR2_xoff
  1548.  move.w newz,PLR2_zoff
  1549.  
  1550.  move.l PLR2_xoff,d0
  1551.  move.l PLR2_zoff,d1
  1552.  sub.l oldxoff,d0
  1553.  sub.l oldzoff,d1
  1554.  move.l #0,PLR2_pushx
  1555.  move.l #0,PLR2_pushz
  1556.  move.l d0,PLR2_opushx
  1557.  move.l d1,PLR2_opushz
  1558.  
  1559.  move.l PLR2_Roompt,a0
  1560.  move.l 2(a0),d0
  1561.  sub.l #playerheight,d0
  1562.  move.l d0,PLR2_tyoff
  1563.  adda.w #22,a0
  1564.  
  1565. ; move.l (a0),a0        ; jump to viewpoint list
  1566.  * A0 is pointing at a pointer to list of points to rotate
  1567.  move.l (a0)+,PLR2_PointsToRotatePtr
  1568.  move.l a0,PLR2_ListOfGraphRooms
  1569.  
  1570. *****************************************************
  1571.  
  1572.  move.l PLR2_tyoff,d0
  1573.  move.l PLR2_yoff,d1
  1574.  move.l PLR2_yvel,d2
  1575.  add.l d2,d1
  1576.  add.l #1024,d2
  1577.  sub.l d1,d0
  1578.  bgt.s .shouldfall
  1579.  move.l #0,d2
  1580.  add.l d0,d1
  1581. .shouldfall:
  1582.  move.l d2,PLR2_yvel
  1583.  move.l d1,PLR2_yoff
  1584.  rts
  1585.  
  1586.  
  1587. DrawDisplay:
  1588.  
  1589.  move.l #SineTable,a0
  1590.  move.w angpos,d0
  1591.  move.w (a0,d0.w),d6
  1592.  adda.w #2048,a0
  1593.  move.w (a0,d0.w),d7
  1594.  move.w d6,sinval
  1595.  move.w d7,cosval
  1596.  
  1597.  move.l yoff,d0
  1598.  asr.l #8,d0
  1599.  move.w d0,d1
  1600.  and.w #63,d1
  1601.  move.w d1,wallyoff
  1602.  asl.w #2,d0
  1603.  move.w d0,flooryoff
  1604.  
  1605.  move.w xoff,d6
  1606.  move.w d6,d3
  1607.  asr.w #1,d3
  1608.  add.w d3,d6
  1609.  asr.w #1,d6
  1610.  move.w d6,xoff34
  1611.  
  1612.  move.w zoff,d6
  1613.  move.w d6,d3
  1614.  asr.w #1,d3
  1615.  add.w d3,d6
  1616.  asr.w #1,d6
  1617.  move.w d6,zoff34
  1618.  
  1619.  bsr RotateLevelPts
  1620.  bsr RotateObjectPts
  1621.  bsr OrderZones
  1622.  
  1623.  move.l ListOfGraphRooms,a0
  1624.  
  1625.  move.l endoflist,a0
  1626. subroomloop:
  1627.  move.w -(a0),d7
  1628.  blt jumpoutofrooms
  1629.  
  1630. ; bsr setlrclip
  1631. ; move.w leftclip,d0
  1632. ; cmp.w rightclip,d0
  1633. ; bge subroomloop
  1634.  move.l a0,-(a7)
  1635.  
  1636.  move.l ZoneAdds,a0
  1637.  move.l (a0,d7.w*4),a0
  1638.  add.l #LEVELDATA,a0
  1639.  move.l ToZoneRoof(a0),SplitHeight
  1640.  
  1641.  move.l ZoneGraphAdds,a0
  1642.  move.l 4(a0,d7.w*8),a2
  1643.  move.l (a0,d7.w*8),a0
  1644.  
  1645.  add.l #LEVELGRAPHICS,a0
  1646.  add.l #LEVELGRAPHICS,a2
  1647.  move.l a2,ThisRoomToDraw+4
  1648.  move.l a0,ThisRoomToDraw
  1649.  
  1650.  move.l ListOfGraphRooms,a1
  1651.  
  1652. finditit:
  1653.  tst.w (a1)
  1654.  blt nomoretodoatall
  1655.  cmp.w (a1),d7
  1656.  beq outoffind
  1657.  adda.w #8,a1
  1658.  bra finditit
  1659.  
  1660. outoffind:
  1661.  
  1662.  move.l a1,-(a7)
  1663.  
  1664.  move.w #0,leftclip
  1665.  move.w #96,rightclip
  1666.  moveq #0,d7
  1667.  move.w 2(a1),d7
  1668.  blt.s outofrcliplop
  1669.  move.l #LEVELCLIPS,a0
  1670.  lea (a0,d7.l*2),a0
  1671.  
  1672.  tst.w (a0)
  1673.  blt outoflcliplop
  1674.  
  1675.  bsr NEWsetlclip
  1676.  
  1677. intolcliplop:        ; clips
  1678.  tst.w (a0)
  1679.  blt outoflcliplop
  1680.  
  1681.  bsr NEWsetlclip 
  1682.  bra intolcliplop
  1683.  
  1684. outoflcliplop:
  1685.  
  1686.  addq #2,a0
  1687.  
  1688.  tst.w (a0)
  1689.  blt outofrcliplop
  1690.  
  1691.  bsr NEWsetrclip
  1692.  
  1693. intorcliplop:        ; clips
  1694.  tst.w (a0)
  1695.  blt outofrcliplop
  1696.  
  1697.  bsr NEWsetrclip 
  1698.  bra intorcliplop
  1699.  
  1700. outofrcliplop:
  1701.  
  1702.  move.w leftclip,d0
  1703.  cmp.w #95,d0
  1704.  bge dontbothercantseeit
  1705.  move.w rightclip,d1
  1706.  blt dontbothercantseeit
  1707.  cmp.w d1,d0
  1708.  bge dontbothercantseeit
  1709.  
  1710.  move.l PLR1_yoff,d0
  1711.  cmp.l SplitHeight,d0
  1712.  blt.s botfirst
  1713.  
  1714.  move.l ThisRoomToDraw+4,a0
  1715.  cmp.l #LEVELGRAPHICS,a0
  1716.  beq.s noupperroom
  1717.  st DOUPPER
  1718.  bsr dothisroom
  1719. noupperroom:
  1720.  move.l ThisRoomToDraw,a0
  1721.  clr.b DOUPPER
  1722.  bsr dothisroom
  1723.  
  1724.  bra dontbothercantseeit
  1725. botfirst:
  1726.  
  1727.  move.l ThisRoomToDraw,a0
  1728.  clr.b DOUPPER
  1729.  bsr dothisroom
  1730.  move.l ThisRoomToDraw+4,a0
  1731.  cmp.l #LEVELGRAPHICS,a0
  1732.  beq.s noupperroom2
  1733.  st DOUPPER
  1734.  bsr dothisroom
  1735. noupperroom2:
  1736.  
  1737. dontbothercantseeit:
  1738. pastemp:
  1739.  
  1740.  move.l (a7)+,a1
  1741.  move.l ThisRoomToDraw,a0
  1742.  move.w (a0),d7
  1743.  adda.w #8,a1
  1744.  bra finditit
  1745.  
  1746. nomoretodoatall:
  1747.  
  1748.  move.l (a7)+,a0
  1749.  
  1750.  bra subroomloop
  1751.  
  1752. jumpoutofrooms:
  1753.  
  1754.  rts
  1755.  
  1756. prot9: dc.w 0
  1757.  
  1758. TempBuffer: ds.l 100 
  1759.  
  1760. ClipTable: ds.l 30
  1761. EndOfClipPt: dc.l 0
  1762. DOUPPER: dc.w 0
  1763.  
  1764. dothisroom
  1765.  
  1766.  move.w (a0)+,d0
  1767.  move.w d0,currzone
  1768.  move.l #ZoneBrightTable,a1
  1769.  move.l (a1,d0.w*4),d1
  1770.  tst.b DOUPPER
  1771.  bne.s .okbot
  1772.  swap d1
  1773. .okbot:
  1774.  move.w d1,ZoneBright
  1775.  
  1776. polyloop:
  1777.  move.w (a0)+,d0
  1778.  blt jumpoutofloop
  1779.  beq itsawall
  1780.  cmp.w #3,d0
  1781.  beq itsasetclip
  1782.  blt itsafloor
  1783.  cmp.w #4,d0
  1784.  beq itsanobject
  1785.  cmp.w #5,d0
  1786.  beq.s itsanarc
  1787.  cmp.w #6,d0
  1788.  beq itsalightbeam
  1789.  cmp.w #7,d0
  1790.  beq.s itswater
  1791.  cmp.w #9,d0
  1792.  ble itsachunkyfloor
  1793.  cmp.w #11,d0
  1794.  ble.s itsabumpyfloor
  1795.  cmp.w #12,d0
  1796.  beq.s itsbackdrop
  1797.  cmp.w #13,d0
  1798.  beq.s itsaseewall
  1799.  
  1800.  bra polyloop
  1801.  
  1802. itsaseewall:
  1803.  st seethru
  1804.  jsr itsawalldraw
  1805.  bra polyloop
  1806.  
  1807. itsbackdrop:
  1808.  jsr putinbackdrop
  1809.  bra polyloop
  1810.  
  1811. itswater:
  1812.  move.w #1,d0
  1813.  move.l #FloorLine,LineToUse
  1814.  st usewater
  1815.  clr.b usebumps
  1816.  jsr itsafloordraw
  1817.  bra polyloop
  1818.  
  1819. itsanarc:
  1820.  jsr CurveDraw
  1821.  bra polyloop
  1822. itsanobject:
  1823.  jsr ObjDraw
  1824.  bra polyloop
  1825. itsalightbeam:
  1826.  jsr LightDraw
  1827.  bra polyloop
  1828.  
  1829. itsabumpyfloor:
  1830.  sub.w #9,d0
  1831.  st usebumps
  1832.  st smoothbumps
  1833.  clr.b usewater
  1834.  move.l #BumpLine,LineToUse
  1835.  jsr itsafloordraw
  1836.  bra polyloop
  1837.  
  1838. itsachunkyfloor:
  1839.  subq.w #7,d0
  1840.  st usebumps
  1841.  sub.w #12,topclip
  1842. ; add.w #10,botclip
  1843.  clr.b smoothbumps
  1844.  clr.b usewater
  1845.  move.l #BumpLine,LineToUse
  1846.  jsr itsafloordraw
  1847.  add.w #12,topclip
  1848. ; sub.w #10,botclip
  1849.  bra polyloop 
  1850.  
  1851. itsafloor:
  1852.  
  1853.  move.l #FloorLine,LineToUse
  1854. * 1,2 = floor/roof
  1855.  clr.b usewater
  1856.  clr.b usebumps
  1857.  jsr itsafloordraw
  1858.  bra polyloop
  1859. itsasetclip:
  1860.  bra polyloop
  1861. itsawall:
  1862.  clr.b seethru
  1863. ; move.l #stripbuffer,a1
  1864.  jsr itsawalldraw
  1865.  bra polyloop
  1866.  
  1867. jumpoutofloop:
  1868.  rts
  1869.  
  1870. ThisRoomToDraw: dc.l 0,0
  1871. SplitHeight: dc.l 0
  1872.  
  1873.  include "ab3:source/OrderZones"
  1874.  
  1875. ReadMouse:
  1876.  clr.l d0
  1877.  clr.l d1
  1878.  move.w $a(a6),d0
  1879.  lsr.w #8,d0
  1880.  ext.l d0
  1881.  move.w d0,d3
  1882.  move.w oldmy,d2
  1883.  sub.w d2,d0
  1884.  
  1885.  cmp.w #127,d0
  1886.  blt nonegy
  1887.  move.w #255,d1
  1888.  sub.w d0,d1
  1889.  move.w d1,d0
  1890.  neg.w d0
  1891. nonegy:
  1892.  
  1893.  cmp.w #-127,d0
  1894.  bge nonegy2
  1895.  move.w #255,d1
  1896.  add.w d0,d1
  1897.  move.w d1,d0
  1898. nonegy2:
  1899.  
  1900.  add.b d0,d2
  1901.  add.w d0,oldy2
  1902.  move.w d2,oldmy
  1903.  move.w d2,d0
  1904.  
  1905.  move.w oldy2,d0
  1906.  move.w d0,ymouse
  1907.  
  1908.  clr.l d0
  1909.  clr.l d1
  1910.  move.w $a(a6),d0
  1911.  ext.w d0
  1912.  ext.l d0
  1913.  move.w d0,d3
  1914.  move.w oldmx,d2
  1915.  sub.w d2,d0
  1916.  
  1917.  cmp.w #127,d0
  1918.  blt nonegx
  1919.  move.w #255,d1
  1920.  sub.w d0,d1
  1921.  move.w d1,d0
  1922.  neg.w d0
  1923. nonegx:
  1924.  
  1925.  cmp.w #-127,d0
  1926.  bge nonegx2
  1927.  move.w #255,d1
  1928.  add.w d0,d1
  1929.  move.w d1,d0
  1930. nonegx2:
  1931.  
  1932.  add.b d0,d2
  1933.  move.w d0,d1
  1934.  move.w d2,oldmx
  1935.  
  1936.  move.w #$0,$dff034
  1937.  btst #2,$dff016
  1938.  beq.s noturn
  1939.  
  1940.  add.w d0,oldx2
  1941.  move.w oldx2,d0
  1942.  and.w #2047,d0
  1943.  move.w d0,oldx2
  1944.  
  1945.  asl.w #2,d0
  1946.  sub.w prevx,d0
  1947.  add.w d0,prevx
  1948.  add.w d0,PLR1s_angpos
  1949.  move.w #0,lrs
  1950.  rts
  1951.  
  1952. noturn:
  1953.  
  1954. ; got to move lr instead. 
  1955.  
  1956. ; d1 = speed moved l/r
  1957.  
  1958.  move.w d1,lrs
  1959.  
  1960.  rts
  1961.  
  1962. lrs: dc.w 0
  1963. prevx: dc.w 0
  1964.  
  1965. mang: dc.w 0
  1966. oldymouse: dc.w 0
  1967. xmouse: dc.w 0
  1968. ymouse: dc.w 0
  1969. oldx2: dc.w 0
  1970. oldmx: dc.w 0
  1971. oldmy: dc.w 0
  1972. oldy2: dc.w 0
  1973.  
  1974. RotateLevelPts:
  1975.  
  1976.  move.w sinval,d6
  1977.  swap d6
  1978.  move.w cosval,d6
  1979.  
  1980.  move.l PointsToRotatePtr,a0
  1981.  move.l Points,a3
  1982.  move.l #Rotated,a1
  1983.  move.l #OnScreen,a2
  1984.  move.w xoff,d4
  1985.  move.w zoff,d5
  1986.  
  1987. ; move.w #$c40,$dff106
  1988. ; move.w #$f00,$dff180
  1989.  
  1990. pointrotlop:
  1991.  move.w (a0)+,d7
  1992.  blt.s outofpointrot
  1993.  
  1994.  move.w (a3,d7*4),d0
  1995.  sub.w d4,d0
  1996.  move.w d0,d2
  1997.  move.w 2(a3,d7*4),d1
  1998.  sub.w d5,d1
  1999.  muls d6,d2
  2000.  swap d6
  2001.  move.w d1,d3
  2002.  muls d6,d3
  2003.  sub.l d3,d2
  2004.  add.l d2,d2
  2005.  swap d2
  2006.  ext.l d2
  2007.  asl.l #7,d2
  2008.  add.l xwobble,d2
  2009.  move.l d2,(a1,d7*8)
  2010.  
  2011.  muls d6,d0
  2012.  swap d6
  2013.  muls d6,d1
  2014.  add.l d0,d1
  2015.  asl.l #2,d1
  2016.  swap d1
  2017.  move.l d1,4(a1,d7*8)
  2018.  
  2019.  tst.w d1
  2020.  bgt.s ptnotbehind
  2021.  tst.w d2
  2022.  bgt.s onrightsomewhere
  2023.  move.w #0,d2
  2024.  bra putin
  2025. onrightsomewhere:
  2026.  move.w #96,d2
  2027.  bra putin
  2028. ptnotbehind:
  2029.  
  2030.  divs d1,d2
  2031.  add.w #47,d2
  2032. putin:
  2033.  move.w d2,(a2,d7*2)
  2034.  
  2035.  bra pointrotlop
  2036. outofpointrot:
  2037.  
  2038. ; move.w #$c40,$dff106
  2039. ; move.w #$ff0,$dff180
  2040.  
  2041.  rts
  2042.  
  2043. RotateObjectPts:
  2044.  
  2045.  move.w sinval,d5
  2046.  move.w cosval,d6
  2047.  
  2048.  move.l ObjectData,a4
  2049.  move.l ObjectPoints,a0
  2050.  move.w NumObjectPoints,d7
  2051.  move.l #ObjRotated,a1
  2052.  move.l #ObsInLine,a2
  2053. objpointrotlop:
  2054.  
  2055.  move.w (a0),d0
  2056.  sub.w xoff,d0
  2057.  move.w 4(a0),d1
  2058.  addq #8,a0
  2059.  
  2060.  tst.w 12(a4)
  2061.  blt noworkout
  2062.  
  2063.  sub.w zoff,d1
  2064.  move.w d0,d2
  2065.  muls d6,d2
  2066.  move.w d1,d3
  2067.  muls d5,d3
  2068.  sub.l d3,d2
  2069.  add.l d2,d2
  2070.  swap d2
  2071.  move.w d2,(a1)+
  2072.  
  2073.  muls d5,d0
  2074.  muls d6,d1
  2075.  add.l d0,d1
  2076.  asl.l #2,d1
  2077.  swap d1
  2078.  moveq #0,d3
  2079.  
  2080.  move.w d1,(a1)+
  2081.  ext.l d2
  2082.  asl.l #7,d2
  2083.  add.l xwobble,d2
  2084.  move.l d2,(a1)+
  2085.  sub.l xwobble,d2
  2086.  tst.w d1
  2087.  ble.s notinline
  2088.  
  2089.  
  2090.  move.l d2,d3
  2091.  divs d1,d2
  2092.  cmp.w #-20,d2
  2093.  blt.s notinline
  2094.  cmp.w #20,d2
  2095.  sle d3
  2096. notinline
  2097.  move.b d3,(a2)+
  2098.  
  2099.  add.w #64,a4
  2100.  dbra d7,objpointrotlop
  2101.  
  2102.  rts
  2103.  
  2104. noworkout:
  2105.   clr.b (a2)+
  2106.   move.l #0,(a1)+
  2107.   move.l #0,(a1)+
  2108.   add.w #64,a4
  2109.   dbra d7,objpointrotlop
  2110.   rts
  2111.  
  2112. LightDraw:
  2113.  
  2114.  move.w (a0)+,d0
  2115.  move.w (a0)+,d1
  2116.  move.l #Rotated,a1
  2117.  move.w 6(a1,d0.w*8),d2
  2118.  ble.s oneendbehind
  2119.  move.w 6(a1,d1.w*8),d3
  2120.  bgt.s bothendsinfront
  2121.  
  2122. oneendbehind:
  2123.  rts
  2124. bothendsinfront:
  2125.  
  2126.  move.l #OnScreen,a2
  2127.  move.w (a2,d0.w*2),d0
  2128.  bge.s okleftend
  2129.  moveq #0,d0
  2130. okleftend:
  2131.  move.w (a2,d1.w*2),d1
  2132.  bgt.s somevis
  2133.  rts
  2134. somevis:
  2135.  cmp.w #95,d0
  2136.  ble.s somevis2
  2137.  rts
  2138. somevis2:
  2139.  cmp.w #95,d1
  2140.  ble.s okrightend
  2141.  move.w #95,d1
  2142. okrightend:
  2143.  
  2144.  sub.w d0,d1
  2145.  blt.s wrongbloodywayround
  2146.  move.l #brightentab,a4
  2147.  move.l #objintocop,a1
  2148.  lea (a1,d0.w*2),a1
  2149.  
  2150.  move.l frompt,a3
  2151.  move.w #104*4,d6
  2152.  move.w #79,d2
  2153. lacross:
  2154.  move.w d2,d3
  2155.  move.l a3,a2
  2156.  adda.w (a1)+,a2
  2157. ldown:
  2158.  add.w d6,a2
  2159.  move.w (a2),d7
  2160.  move.w (a4,d7.w*2),(a2)
  2161.  dbra d3,ldown
  2162.  dbra d1,lacross
  2163.  
  2164. wrongbloodywayround:
  2165.  
  2166.  rts
  2167.  
  2168. FaceToPlace: dc.w 0
  2169.  
  2170. Cheese:
  2171.  dc.w 4,15
  2172.  
  2173. FacesList:
  2174.  dc.w 0,4*4
  2175.  dc.w 1,2*4
  2176.  dc.w 0,2*4
  2177.  dc.w 2,2*4
  2178.  dc.w 0,2*4
  2179.  dc.w 1,3*4
  2180.  dc.w 0,2*4
  2181.  dc.w 2,3*4
  2182.  dc.w 0,5*4
  2183.  dc.w 1,2*4
  2184.  dc.w 0,2*4
  2185.  dc.w 2,2*4
  2186.  dc.w 0,2*4
  2187.  dc.w 1,2*4
  2188.  dc.w 0,2*4
  2189.  dc.w 2,3*4
  2190.  dc.w 0,1*4
  2191.  dc.w 1,3*4
  2192.  dc.w 0,1*4
  2193.  dc.w 2,3*4
  2194.  dc.w 0,1*4
  2195.  
  2196. EndOfFacesList:
  2197.  
  2198. FacesPtr:
  2199.  dc.l FacesList
  2200. FacesCounter:
  2201.  dc.w 0
  2202. Expression:
  2203.  dc.w 0
  2204.  
  2205. PlaceFace:
  2206.  
  2207.  move.w FacesCounter,d0
  2208.  subq #1,d0
  2209.  bgt.s NoNewFace
  2210.  
  2211.  move.l FacesPtr,a0
  2212.  
  2213.  move.w 2(a0),d0
  2214.  move.w (a0),Expression
  2215.  addq #4,a0
  2216.  cmp.l #EndOfFacesList,a0
  2217.  blt.s NotFirstFace
  2218.  
  2219.  move.l #FacesList,a0
  2220.  
  2221. NotFirstFace
  2222.  move.l a0,FacesPtr
  2223.  
  2224. NoNewFace:
  2225.  
  2226.  move.w d0,FacesCounter
  2227.  
  2228.  Move.w FaceToPlace,d0
  2229.  muls #5,d0
  2230.  add.w Expression,d0
  2231.  move.l #FacePlace+10,a0
  2232.  move.l #Faces,a1
  2233.  muls #(4*32*5),d0
  2234.  adda.w d0,a1
  2235.  move.w #4,d0
  2236.  move.w #24,d1
  2237.  
  2238.  move.w #4,d3
  2239. bitplaneloop:
  2240.  move.w #31,d2
  2241. PlaceFaceToPlaceInFacePlaceLoop:
  2242.  move.l (a1),(a0)
  2243.  adda.w d0,a1
  2244.  adda.w d1,a0
  2245.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  2246.  dbra d3,bitplaneloop
  2247.  
  2248.  rts
  2249.  
  2250. Energy:
  2251.  dc.w 191
  2252. OldEnergy:
  2253.  dc.w 191
  2254. Ammo: dc.w 63
  2255. OldAmmo: dc.w 63
  2256.  
  2257. FullEnergy:
  2258.  move.w #127,Energy
  2259.  move.w #127,OldEnergy
  2260.  move.l #health,a0
  2261.  move.l #borders,a1
  2262.  add.l #25*8*2+6,a1
  2263.  lea 2592(a1),a2
  2264.  move.w #127,d0
  2265. PutInFull:
  2266.  move.b (a0)+,(a1)
  2267.  move.b (a0)+,8(a1)
  2268.  add.w #16,a1
  2269.  move.b (a0)+,(a2)
  2270.  move.b (a0)+,8(a2)
  2271.  add.w #16,a2
  2272.  dbra d0,PutInFull
  2273.  
  2274.  rts
  2275.  
  2276. EnergyBar:
  2277.  
  2278.  move.w Energy,d0
  2279.  cmp.w OldEnergy,d0
  2280.  bne.s gottochange
  2281.  
  2282. NoChange
  2283.  rts
  2284.  
  2285. gottochange:
  2286.   
  2287.  blt LessEnergy
  2288.  cmp.w #127,Energy
  2289.  blt.s NotMax
  2290.  move.w #127,Energy
  2291. NotMax:
  2292.  
  2293.  move.w Energy,d0
  2294.  move.w OldEnergy,d2
  2295.  sub.w d0,d2
  2296.  beq.s NoChange    
  2297.  neg.w d2
  2298.  
  2299.  move.w #127,d3
  2300.  sub.w d0,d3
  2301.  
  2302.  move.l #health,a0
  2303.  lea (a0,d3.w*4),a0
  2304.  move.l #borders+25*16+6,a1
  2305.  lsl.w #4,d3
  2306.  add.w d3,a1
  2307.  lea 2592(a1),a2
  2308.  
  2309. EnergyRise:
  2310.  move.b (a0)+,(a1)
  2311.  move.b (a0)+,8(a1)
  2312.  add.w #16,a1
  2313.  move.b (a0)+,(a2)
  2314.  move.b (a0)+,8(a2)
  2315.  add.w #16,a2
  2316.  subq #1,d2
  2317.  bgt.s EnergyRise
  2318.  
  2319.  move.w Energy,OldEnergy
  2320.  
  2321.  rts 
  2322.  
  2323. LessEnergy: 
  2324.  move.w OldEnergy,d2
  2325.  sub.w d0,d2
  2326.  
  2327.  move.w #127,d3
  2328.  sub.w OldEnergy,d3
  2329.  
  2330.  move.l #borders+25*16+6,a1
  2331.  asl.w #4,d3
  2332.  add.w d3,a1
  2333.  lea 2592(a1),a2
  2334.  
  2335. EnergyDrain:
  2336.  move.b #0,(a1)
  2337.  move.b #0,8(a1)
  2338.  move.b #0,(a2)
  2339.  move.b #0,8(a2)
  2340.  add.w #16,a1
  2341.  add.w #16,a2
  2342.  subq #1,d2
  2343.  bgt.s EnergyDrain
  2344.  
  2345.  move.w Energy,OldEnergy
  2346.  
  2347.  rts 
  2348.  
  2349. AmmoBar:
  2350.  
  2351.  move.w Ammo,d0
  2352.  cmp.w OldAmmo,d0
  2353.  bne.s .gottochange
  2354.  
  2355. .NoChange
  2356.  rts
  2357.  
  2358. .gottochange:
  2359.   
  2360.  blt LessAmmo
  2361.  cmp.w #63,Ammo
  2362.  blt.s .NotMax
  2363.  move.w #63,Ammo
  2364. .NotMax:
  2365.  
  2366.  move.w Ammo,d0
  2367.  move.w OldAmmo,d2
  2368.  sub.w d0,d2
  2369.  beq.s .NoChange
  2370.  neg.w d2
  2371.  
  2372.  move.w #63,d3
  2373.  sub.w d0,d3
  2374.  
  2375.  move.l #Ammunition,a0
  2376.  lea (a0,d3.w*8),a0
  2377.  move.l #borders+5184+25*16+1,a1
  2378.  lsl.w #5,d3
  2379.  add.w d3,a1
  2380.  lea 2592(a1),a2
  2381.  
  2382. AmmoRise:
  2383.  move.b (a0)+,(a1)
  2384.  move.b (a0)+,8(a1)
  2385.  add.w #16,a1
  2386.  move.b (a0)+,(a2)
  2387.  move.b (a0)+,8(a2)
  2388.  add.w #16,a2
  2389.  move.b (a0)+,(a1)
  2390.  move.b (a0)+,8(a1)
  2391.  add.w #16,a1
  2392.  move.b (a0)+,(a2)
  2393.  move.b (a0)+,8(a2)
  2394.  add.w #16,a2
  2395.  subq #1,d2
  2396.  bgt.s AmmoRise
  2397.  
  2398.  move.w Ammo,OldAmmo
  2399.  
  2400.  rts 
  2401.  
  2402.  
  2403. LessAmmo: 
  2404.  move.w OldAmmo,d2
  2405.  sub.w d0,d2
  2406.  
  2407.  move.w #63,d3
  2408.  sub.w OldAmmo,d3
  2409.  
  2410.  move.l #borders++5184+25*16+1,a1
  2411.  asl.w #5,d3
  2412.  add.w d3,a1
  2413.  lea 2592(a1),a2
  2414.  
  2415. AmmoDrain:
  2416.  move.b #0,(a1)
  2417.  move.b #0,8(a1)
  2418.  move.b #0,(a2)
  2419.  move.b #0,8(a2)
  2420.  add.w #16,a1
  2421.  add.w #16,a2
  2422.  move.b #0,(a1)
  2423.  move.b #0,8(a1)
  2424.  move.b #0,(a2)
  2425.  move.b #0,8(a2)
  2426.  add.w #16,a1
  2427.  add.w #16,a2
  2428.  subq #1,d2
  2429.  bgt.s AmmoDrain
  2430.  
  2431.  move.w Ammo,OldAmmo
  2432.  
  2433.  rts 
  2434.  
  2435. nulop:
  2436.  move.w #$0010,$dff000+intreq
  2437.  rte
  2438.  
  2439. doanything: dc.w 0
  2440.  
  2441. end:
  2442.  
  2443.  move.l drawpt,d0
  2444.  move.l olddrawpt,drawpt
  2445.  move.l d0,olddrawpt
  2446.  move.l d0,$dff084
  2447.  
  2448.  clr.b doanything
  2449.  cmp.b #'b',Prefsfile+3
  2450.  bne.s .noback
  2451.  jsr mt_end
  2452. .noback
  2453.  tst.w Energy
  2454.  bgt.s wevewon
  2455.  
  2456.  move.l #gameover,mt_data
  2457.  st UseAllChannels
  2458.  clr.b reachedend
  2459.  jsr mt_init
  2460. playgameover:
  2461.  move.l #$dff000,a6
  2462. waitfortop2:
  2463.  btst.b #0,intreqrl(a6)
  2464.  beq waitfortop2
  2465.  move.w #$1,intreq(a6)
  2466.  
  2467.  jsr mt_music
  2468.  
  2469.  tst.b reachedend
  2470.  beq.s playgameover
  2471.  
  2472.  bra wevelost
  2473. wevewon:
  2474.  move.l #welldone,mt_data
  2475.  st UseAllChannels
  2476.  clr.b reachedend
  2477.  jsr mt_init
  2478. playwelldone:
  2479.  move.l #$dff000,a6
  2480. waitfortop3:
  2481.  btst.b #0,intreqrl(a6)
  2482.  beq waitfortop3
  2483.  move.w #$1,intreq(a6)
  2484.  
  2485.  jsr mt_music
  2486.  
  2487.  tst.b reachedend
  2488.  beq.s playwelldone
  2489.  
  2490.  
  2491. wevelost:
  2492.  jmp closeeverything 
  2493.  
  2494. endnomusic
  2495.  clr.b doanything
  2496.  cmp.b #'b',Prefsfile+3
  2497.  bne.s .noback
  2498.  jsr mt_end
  2499. .noback
  2500.  jmp closeeverything
  2501.  
  2502. do32:
  2503.  move.w #31,d7
  2504.  move.w #$180,d1
  2505. across:
  2506.  move.w d1,(a1)+
  2507.  move.w d1,(a3)+
  2508.  move.w #0,(a1)+
  2509.  move.w #0,(a3)+
  2510.  add.w #2,d1
  2511.  dbra d7,across
  2512.  rts
  2513.  
  2514.  
  2515.  
  2516. *************************************
  2517. * Set left and right clip values
  2518. *************************************
  2519.  
  2520.  
  2521.  
  2522. NEWsetlclip:
  2523.  move.l #OnScreen,a1
  2524.  move.l #Rotated,a2
  2525.  move.l CONNECT_TABLE,a3
  2526.  
  2527.  move.w (a0),d0
  2528.  bge.s .notignoreleft
  2529.  
  2530. ; move.l #0,(a6)
  2531.  
  2532.  bra .leftnotoktoclip
  2533. .notignoreleft:
  2534.  
  2535.  move.w 6(a2,d0*8),d3    ; left z val
  2536.  bgt.s .leftclipinfront
  2537.  addq #2,a0
  2538.  rts
  2539.  
  2540.  tst.w 6(a2,d0*8)
  2541.  bgt.s .leftnotoktoclip
  2542. .ignoreboth:
  2543. ; move.l #0,(a6)
  2544. ; move.l #96*65536,4(a6)
  2545.  move.w #0,leftclip
  2546.  move.w #96,rightclip
  2547.  addq #8,a6
  2548.  addq #2,a0
  2549.  rts
  2550.  
  2551. .leftclipinfront:
  2552.  move.w (a1,d0*2),d1    ; left x on screen
  2553.  move.w (a0),d2
  2554.  move.w 2(a3,d2.w*4),d2
  2555.  move.w (a1,d2.w*2),d2
  2556.  cmp.w d1,d2
  2557.  bgt.s .leftnotoktoclip
  2558.  
  2559. ; move.w d1,(a6)
  2560. ; move.w d3,2(a6)
  2561.  cmp.w leftclip(pc),d1
  2562.  ble.s .leftnotoktoclip
  2563.  move.w d1,leftclip
  2564. .leftnotoktoclip:
  2565.  
  2566.  addq #2,a0
  2567.  
  2568.  rts
  2569.  
  2570. NEWsetrclip
  2571.  move.l #OnScreen,a1
  2572.  move.l #Rotated,a2
  2573.  move.l CONNECT_TABLE,a3
  2574.  move.w (a0),d0
  2575.  bge.s .notignoreright
  2576. ; move.w #96,4(a6)
  2577. ; move.w #0,6(a6)
  2578.  move.w #0,d4
  2579.  bra .rightnotoktoclip
  2580. .notignoreright:
  2581.  move.w 6(a2,d0*8),d4    ; right z val
  2582.  bgt.s .rightclipinfront
  2583. ; move.w #96,4(a6)
  2584. ; move.w #0,6(a6)
  2585.  bra.s .rightnotoktoclip
  2586.  
  2587. .rightclipinfront:
  2588.  move.w (a1,d0*2),d1    ; right x on screen
  2589.  move.w (a0),d2
  2590.  move.w (a3,d2.w*4),d2
  2591.  move.w (a1,d2.w*2),d2
  2592.  cmp.w d1,d2
  2593.  blt.s .rightnotoktoclip
  2594. ; move.w d1,4(a6)
  2595. ; move.w d4,6(a6)
  2596.  
  2597.  cmp.w rightclip(pc),d1
  2598.  bge.s .rightnotoktoclip
  2599.  addq #1,d1
  2600.  move.w d1,rightclip
  2601. .rightnotoktoclip:
  2602.  addq #8,a6
  2603.  addq #2,a0
  2604.  rts
  2605.  
  2606. FIRSTsetlrclip:
  2607.  move.l #OnScreen,a1
  2608.  move.l #Rotated,a2
  2609.  
  2610.  move.w (a0)+,d0
  2611.  bge.s .notignoreleft
  2612.  bra .leftnotoktoclip
  2613. .notignoreleft:
  2614.  
  2615.  move.w 6(a2,d0*8),d3    ; left z val
  2616.  bgt.s .leftclipinfront
  2617.  
  2618.  move.w (a0),d0
  2619.  blt.s .ignoreboth
  2620.  tst.w 6(a2,d0*8)
  2621.  bgt.s .leftnotoktoclip
  2622. .ignoreboth
  2623.  move.w #96,rightclip
  2624.  move.w #0,leftclip
  2625.  addq #2,a0
  2626.  rts
  2627.  
  2628. .leftclipinfront:
  2629.  move.w (a1,d0*2),d1    ; left x on screen
  2630.  cmp.w leftclip(pc),d1
  2631.  ble.s .leftnotoktoclip
  2632.  move.w d1,leftclip
  2633. .leftnotoktoclip:
  2634.  
  2635.  move.w (a0)+,d0
  2636.  bge.s .notignoreright
  2637.  move.w #0,d4
  2638.  bra .rightnotoktoclip
  2639. .notignoreright:
  2640.  move.w 6(a2,d0*8),d4    ; right z val
  2641.  ble.s .rightnotoktoclip
  2642.  
  2643. .rightclipinfront:
  2644.  move.w (a1,d0*2),d1    ; right x on screen
  2645.  cmp.w rightclip(pc),d1
  2646.  bge.s .rightnotoktoclip
  2647.  addq #1,d1
  2648.  move.w d1,rightclip
  2649. .rightnotoktoclip:
  2650.  
  2651. ; move.w leftclip,d0
  2652. ; move.w rightclip,d1
  2653. ; cmp.w d0,d1
  2654. ; bge.s .noswap
  2655. ; move.w #96,rightclip
  2656. ; move.w #0,leftclip
  2657. ;.noswap:
  2658.  
  2659.  rts
  2660.  
  2661.  
  2662. leftclip2: dc.w 0
  2663. rightclip2: dc.w 0
  2664. ZoneBright: dc.w 0
  2665.  
  2666. npolys: dc.w 0
  2667.  
  2668. PLR1_fire: dc.b 0
  2669. PLR2_fire: dc.b 0
  2670.  
  2671. turnleftright:
  2672.  
  2673.  move.w PLR2_angspd,d1
  2674.  move.w PLR2_angpos,d0
  2675.  
  2676.  move.w #120,d7
  2677.  muls TempFrames,d7
  2678.  
  2679.  move.w d1,d2
  2680.  neg.w d2
  2681.  cmp.w d7,d2
  2682.  ble.s okslow
  2683.  move.w d7,d2
  2684. okslow
  2685.  neg.w d7
  2686.  cmp.w d7,d2
  2687.  bge.s okslo
  2688.  move.w d7,d2
  2689. okslo:
  2690.  
  2691.  asr.w #1,d7
  2692.  
  2693.  btst #1,$d(a6)
  2694.  sne d3
  2695.  beq.s notleft
  2696.  move.w d7,d2
  2697.  neg.w d2
  2698. ; tst.w d1
  2699. ; bge.s notleft
  2700. ; moveq #0,d1
  2701. notleft
  2702.  
  2703.  btst #1,$c(a6)
  2704.  sne d4
  2705.  beq.s notright
  2706.  move.w d7,d2
  2707. ; tst.w d1
  2708. ; ble.s notright
  2709. ; moveq #0,d1
  2710. notright
  2711.  
  2712.  move.w #0,PLR2_ForwardSpd
  2713.  
  2714.  btst #0,$dff00c
  2715.  sne d5
  2716.  eor.b d4,d5
  2717.  beq.s notup
  2718.  move.w TempFrames,d7
  2719.  neg.w d7
  2720.  asl.w #2,d7
  2721.  move.w d7,PLR2_ForwardSpd
  2722. notup:
  2723.  
  2724.  btst #0,$dff00d
  2725.  sne d5
  2726.  eor.b d3,d5
  2727.  beq.s notdown
  2728.  move.w TempFrames,d7
  2729.  asl.w #2,d7
  2730.  move.w d7,PLR2_ForwardSpd
  2731. notdown:
  2732.  
  2733.  add.w d2,d1
  2734.  cmp.w #-360,d1
  2735.  bge.s okspdlft
  2736.  move.w #-360,d1
  2737. okspdlft:
  2738.  cmp.w #360,d1
  2739.  ble.s okspdrgt
  2740.  move.w #360,d1
  2741. okspdrgt:
  2742.  
  2743.  move.w d1,PLR2_angspd
  2744.  add.w d1,d0
  2745.  and.w #8191,d0
  2746.  move.w d0,PLR2_angpos
  2747.  rts
  2748.  
  2749. *****************************************************
  2750.  
  2751.  include "ab3:source/ObjectMove"
  2752.  
  2753. pastdata:
  2754. ***********************************
  2755. * This routine animates brightnesses.
  2756.  
  2757.  
  2758. liftpt: dc.l liftanimtab
  2759.  
  2760. brightpt:
  2761.  dc.l brightanimtab
  2762.  
  2763.  
  2764. liftanim:
  2765.  rts
  2766.  
  2767. ******************************
  2768.  include "ab3:source/SlaveAnims"
  2769. ******************************
  2770. startpass:
  2771. ; include "ab3:source/password_reloc.s"
  2772. endpass:
  2773.  
  2774. rotanimpt: dc.w 0
  2775. xradd: dc.w 5
  2776. yradd: dc.w 8
  2777. xrpos: dc.w 320
  2778. yrpos: dc.w 320
  2779.  
  2780. rotanim:
  2781.  rts
  2782.  
  2783. option:
  2784.  dc.l 0,0
  2785.  
  2786. ********** WALL STUFF *******************************
  2787.  
  2788.  include "AB3:source/wallroutine3.chipmem"
  2789.  
  2790. *****************************************************
  2791.  
  2792. ******************************************
  2793. * floor polygon
  2794.  
  2795. numsidestd: dc.w 0
  2796. bottomline: dc.w 0
  2797.  
  2798. NewCornerBuff:
  2799.  ds.l 100
  2800.  
  2801. itsafloordraw:
  2802.  
  2803. * If D0 =1 then its a floor otherwise (=2) it's
  2804. * a roof.
  2805.  
  2806.  move.w #0,above
  2807.  move.w (a0)+,d6    ; ypos of poly
  2808.  
  2809.  move.w leftclip(pc),d7
  2810.  cmp.w rightclip(pc),d7
  2811.  bge.s dontdrawreturn
  2812.  
  2813.  move.w botclip,d7
  2814.  sub.w #40,d7
  2815.  ble.s dontdrawreturn
  2816.  sub.w flooryoff,d6
  2817.  bgt.s below
  2818.  blt.s aboveplayer
  2819. dontdrawreturn:
  2820.  move.w (a0)+,d6    ; sides-1
  2821.  add.w d6,d6
  2822.  add.w d6,a0
  2823.  add.w #4+6,a0
  2824.  rts
  2825. aboveplayer:
  2826.  cmp.w #2,d0
  2827.  bne.s dontdrawreturn
  2828.  move.w #40,d7
  2829.  sub.w topclip,d7 
  2830.  blt.s dontdrawreturn
  2831.  move.w #1,d0
  2832.  move.w d0,above
  2833.  neg.w d6
  2834. below:
  2835.  cmp.w #1,d0
  2836.  bne.s dontdrawreturn
  2837.  move.w d6,distaddr
  2838.  muls #64,d6
  2839.  move.l d6,ypos
  2840.  divs d7,d6        ; zpos of bottom
  2841.             ; visible line
  2842.  move.w d6,minz
  2843.  move.w d7,bottomline
  2844.  
  2845. ; Go round each point finding out
  2846. ; if it should be visible or not.
  2847.  
  2848.  move.l a0,-(a7)
  2849.  
  2850.  move.w (a0)+,d7    ; number of sides
  2851.  move.l #Rotated,a1
  2852.  move.l #OnScreen,a2
  2853.  move.l #NewCornerBuff,a3
  2854.  moveq #0,d4
  2855.  moveq #0,d5
  2856.  moveq #0,d6
  2857.  clr.b anyclipping
  2858.  
  2859. cornerprocessloop:
  2860.  
  2861.  move.w (a0)+,d0
  2862.  move.w 6(a1,d0.w*8),d1
  2863.  ble  .canttell
  2864.  
  2865.  move.w (a2,d0.w*2),d3
  2866.  cmp.w leftclip,d3
  2867.  bgt.s .nol
  2868.  st d4
  2869.  st anyclipping
  2870.  bra.s .nos
  2871. .nol:
  2872.  cmp.w rightclip,d3
  2873.  blt.s .nor
  2874.  st d6
  2875.  st anyclipping
  2876.  bra.s .nos
  2877. .nor:
  2878.  st d5
  2879. .nos:
  2880.  bra .cantell
  2881.  
  2882. .canttell:
  2883.  st d5
  2884.  st anyclipping
  2885.  
  2886. .cantell:
  2887.  
  2888.  
  2889.  dbra d7,cornerprocessloop
  2890.  
  2891.  move.l (a7)+,a0
  2892.  tst.b d5
  2893.  bne.s somefloortodraw
  2894.  eor.b d4,d6
  2895.  bne dontdrawreturn
  2896.  
  2897. somefloortodraw:
  2898.  
  2899.  move.w #80,top
  2900.  move.w #-1,bottom
  2901.  move.w #0,drawit
  2902.  move.l #Rotated,a1
  2903.  move.l #OnScreen,a2
  2904.  move.w (a0)+,d7    ; no of sides
  2905. sideloop:
  2906.  move.w minz,d6
  2907.  move.w (a0)+,d1
  2908.  move.w (a0),d3
  2909.  move.w 6(a1,d1*8),d4    ;first z
  2910.  cmp.w d6,d4
  2911.  bgt firstinfront
  2912.  move.w 6(a1,d3*8),d5    ; sec z
  2913.  cmp.w d6,d5
  2914.  ble bothbehind
  2915. ** line must be on left and partially behind.
  2916.  sub.w d5,d4
  2917.  move.l (a1,d1*8),d0
  2918.  sub.l (a1,d3*8),d0
  2919.  asr.l #7,d0
  2920.  sub.w d5,d6
  2921.  muls d6,d0    ; new x coord
  2922.  divs d4,d0
  2923.  ext.l d0
  2924.  asl.l #7,d0
  2925.  
  2926.  add.l (a1,d3*8),d0
  2927.  move.w minz,d4
  2928.  move.w (a2,d3*2),d2
  2929.  divs d4,d0
  2930.  add.w #47,d0
  2931.  move.l ypos,d3
  2932.  divs d5,d3
  2933.  move.w bottomline,d1 
  2934.  bra lineclipped
  2935.  
  2936. firstinfront:
  2937.  move.w 6(a1,d3*8),d5    ; sec z
  2938.  cmp.w d6,d5
  2939.  bgt bothinfront
  2940. ** line must be on right and partially behind.
  2941.  sub.w d4,d5    ; dz
  2942.  move.l (a1,d3*8),d2
  2943.  sub.l (a1,d1*8),d2    ; dx
  2944.  sub.w d4,d6
  2945.  asr.l #7,d2
  2946.  muls d6,d2    ; new x coord
  2947.  divs d5,d2
  2948.  ext.l d2
  2949.  asl.l #7,d2
  2950.  add.l (a1,d1*8),d2
  2951.  move.w minz,d5
  2952.  move.w (a2,d1*2),d0
  2953.  divs d5,d2
  2954.  add.w #47,d2
  2955.  move.l ypos,d1
  2956.  divs d4,d1
  2957.  move.w bottomline,d3 
  2958.  bra lineclipped
  2959.  
  2960. bothinfront:
  2961.  
  2962. * Also, usefully enough, both are on-screen
  2963. * so no bottom clipping is needed.
  2964.  
  2965.  move.w (a2,d1*2),d0    ; first x
  2966.  move.w (a2,d3*2),d2    ; second x
  2967.  move.l ypos,d1
  2968.  move.l d1,d3
  2969.  divs d4,d1        ; first y
  2970.  divs d5,d3        ; second y
  2971. lineclipped:
  2972.  move.l #rightsidetab,a3
  2973.  cmp.w d1,d3
  2974.  beq lineflat
  2975.  st drawit
  2976.  bgt lineonright
  2977.  move.l #leftsidetab,a3
  2978.  exg d1,d3
  2979.  exg d0,d2
  2980.  
  2981.  lea (a3,d1*2),a3
  2982.  
  2983.  cmp.w top(pc),d1
  2984.  bge.s .nonewtop
  2985.  move.w d1,top
  2986. .nonewtop:
  2987.  cmp.w bottom(pc),d3
  2988.  ble.s .nonewbot
  2989.  move.w d3,bottom
  2990. .nonewbot:
  2991.  
  2992.  sub.w d1,d3    ; dy
  2993.  sub.w d0,d2    ; dx
  2994.  
  2995.  blt .linegoingleft
  2996.  sub.w #1,d0
  2997.  
  2998.  ext.l d2
  2999.  divs d3,d2
  3000.  move.w d2,d6
  3001.  swap d2
  3002.  
  3003. ; moveq #0,d6
  3004. ; sub.w d3,d2
  3005. ; blt.s .noco
  3006. ;.makeco
  3007. ; addq #1,d6
  3008. ; sub.w d3,d2
  3009. ; bge.s .makeco
  3010. ;.noco
  3011. ; add.w d3,d2
  3012.  
  3013.  move.w d3,d4
  3014.  move.w d3,d5
  3015.  subq #1,d5
  3016.  move.w d6,d1
  3017.  addq #1,d1
  3018.  
  3019. .pixlopright:
  3020.  move.w d0,(a3)+
  3021.  sub.w d2,d4
  3022.  bge.s .nobigstep
  3023.  add.w d1,d0
  3024.  add.w d3,d4
  3025.  dbra d5,.pixlopright
  3026.  bra lineflat
  3027. .nobigstep
  3028.  add.w d6,d0
  3029.  dbra d5,.pixlopright
  3030.  bra lineflat
  3031.  
  3032. .linegoingleft:
  3033.  
  3034.  sub.w #1,d0
  3035.  
  3036.  neg.w d2
  3037.  
  3038.  ext.l d2
  3039.  divs d3,d2
  3040.  move.w d2,d6
  3041.  swap d2
  3042.  
  3043.  
  3044. ; moveq #0,d6
  3045. ; sub.w d3,d2
  3046. ; blt.s .nocol
  3047. ;.makecol
  3048. ; addq #1,d6
  3049. ; sub.w d3,d2
  3050. ; bge.s .makecol
  3051. ;.nocol
  3052. ; add.w d3,d2
  3053.  
  3054.  
  3055.  
  3056.  move.w d3,d4
  3057.  move.w d3,d5
  3058.  subq #1,d5
  3059.  
  3060.  move.w d6,d1
  3061.  addq #1,d1
  3062.  
  3063. .pixlopleft:
  3064.  sub.w d2,d4
  3065.  bge.s .nobigstepl
  3066.  sub.w d1,d0
  3067.  add.w d3,d4
  3068.  move.w d0,(a3)+
  3069.  dbra d5,.pixlopleft
  3070.  bra lineflat
  3071.  
  3072. .nobigstepl
  3073.  sub.w d6,d0
  3074.  move.w d0,(a3)+
  3075.  dbra d5,.pixlopleft
  3076.  bra lineflat
  3077.  
  3078. lineonright:
  3079.  
  3080.  lea (a3,d1*2),a3
  3081.  
  3082.  cmp.w top(pc),d1
  3083.  bge.s .nonewtop
  3084.  move.w d1,top
  3085. .nonewtop:
  3086.  cmp.w bottom(pc),d3
  3087.  ble.s .nonewbot
  3088.  move.w d3,bottom
  3089. .nonewbot:
  3090.  
  3091.  sub.w d1,d3    ; dy
  3092.  sub.w d0,d2    ; dx
  3093.  blt .linegoingleft
  3094. ; addq #1,d0
  3095.  ext.l d2
  3096.  divs d3,d2
  3097.  move.w d2,d6
  3098.  swap d2
  3099.  
  3100. ; moveq #0,d6
  3101. ; sub.w d3,d2
  3102. ; blt.s .noco
  3103. ;.makeco
  3104. ; addq #1,d6
  3105. ; sub.w d3,d2
  3106. ; bge.s .makeco
  3107. ;.noco
  3108. ; add.w d3,d2
  3109.  
  3110.  move.w d3,d4
  3111.  move.w d3,d5
  3112.  subq #1,d5
  3113.  move.w d6,d1
  3114.  addq #1,d1
  3115.  
  3116. .pixlopright:
  3117.  sub.w d2,d4
  3118.  bge.s .nobigstep
  3119.  add.w d1,d0
  3120.  add.w d3,d4
  3121.  move.w d0,(a3)+
  3122.  dbra d5,.pixlopright
  3123.  bra lineflat
  3124.  
  3125. .nobigstep
  3126.  add.w d6,d0
  3127.  move.w d0,(a3)+
  3128.  dbra d5,.pixlopright
  3129.  bra lineflat
  3130.  
  3131. .linegoingleft:
  3132. ; addq #1,d0
  3133.  neg.w d2
  3134.  
  3135.  ext.l d2
  3136.  divs d3,d2
  3137.  move.w d2,d6
  3138.  swap d2
  3139.  
  3140.  
  3141. ; moveq #0,d6
  3142. ; sub.w d3,d2
  3143. ; blt.s .nocol
  3144. ;.makecol
  3145. ; addq #1,d6
  3146. ; sub.w d3,d2
  3147. ; bge.s .makecol
  3148. ;.nocol
  3149. ; add.w d3,d2
  3150.  
  3151.  move.w d3,d4
  3152.  move.w d3,d5
  3153.  subq #1,d5
  3154.  move.w d6,d1
  3155.  addq #1,d1
  3156.  
  3157. .pixlopleft:
  3158.  move.w d0,(a3)+
  3159.  sub.w d2,d4
  3160.  bge.s .nobigstepl
  3161.  sub.w d1,d0
  3162.  add.w d3,d4
  3163.  dbra d5,.pixlopleft
  3164.  bra lineflat
  3165.  
  3166. .nobigstepl
  3167.  sub.w d6,d0
  3168.  dbra d5,.pixlopleft
  3169.  
  3170. lineflat:
  3171.  
  3172. bothbehind:
  3173.  dbra d7,sideloop
  3174.  
  3175. pastsides:
  3176.  
  3177.  
  3178.  addq #2,a0
  3179.  
  3180.  move.w #104*4,linedir
  3181.  move.l frompt,a6
  3182.  add.l #104*4*41,a6
  3183.  move.w (a0)+,scaleval
  3184.  move.w (a0)+,whichtile
  3185.  move.w (a0)+,d6
  3186.  add.w ZoneBright,d6
  3187.  move.w d6,lighttype
  3188.  move.w above(pc),d6
  3189.  beq groundfloor
  3190. * on ceiling:
  3191.  move.w #-104*4,linedir
  3192.  suba.w #104*4,a6
  3193. groundfloor:
  3194.  
  3195.  move.w xoff,d6
  3196.  move.w zoff,d7
  3197.  add.w xwobxoff,d7
  3198.  add.w xwobzoff,d6
  3199.  move.w scaleval(pc),d3
  3200.  beq.s .samescale
  3201.  bgt.s .scaledown
  3202.  neg.w d3
  3203.  asr.l d3,d7
  3204.  asr.l d3,d6
  3205.  bra.s .samescale
  3206. .scaledown:
  3207.  asl.l d3,d6
  3208.  asl.l d3,d7
  3209. .samescale
  3210.  asl.w #8,d7
  3211.  move.w d6,sxoff
  3212.  move.w d7,szoff
  3213.  bra pastscale 
  3214.  
  3215.  asr.l #3,d1
  3216.  asr.l #3,d2
  3217.  asr.l #2,d1
  3218.  asr.l #2,d2
  3219.  asr.l #1,d1
  3220.  asr.l #1,d2
  3221. scaleprogfrom
  3222.  nop
  3223.  nop
  3224.  asl.l #1,d1
  3225.  asl.l #1,d2
  3226.  asl.l #2,d1
  3227.  asl.l #2,d2
  3228.  asl.l #3,d1
  3229.  asl.l #3,d2
  3230.  
  3231. top: dc.w 0
  3232. bottom: dc.w 0
  3233. ypos: dc.l 0
  3234. nfloors: dc.w 0
  3235. lighttype: dc.w 0
  3236. above: dc.w 0 
  3237. linedir: dc.w 0
  3238. distaddr: dc.w 0
  3239.  
  3240. minz: dc.w 0
  3241. leftsidetab:
  3242.  ds.w 80
  3243. rightsidetab:
  3244.  ds.w 80
  3245. leftsideclip:
  3246.  ds.w 80
  3247. rightsideclip:
  3248.  ds.w 80
  3249.  
  3250. movespd: dc.w 0
  3251. largespd: dc.l 0
  3252.  
  3253. pastscale:
  3254.  
  3255.  tst.b drawit(pc)
  3256.  beq dontdrawfloor
  3257.  
  3258.  move.l a0,-(a7)
  3259.  
  3260.  move.l #leftsidetab,a4
  3261.  move.w top(pc),d1
  3262.  move.w bottom(pc),d7
  3263.  tst.w above
  3264.  beq.s clipfloor
  3265.  
  3266.  move.w #40,d3
  3267.  move.w d3,d4
  3268.  sub.w topclip,d3
  3269.  sub.w botclip,d4
  3270.  cmp.w d3,d1
  3271.  bge predontdrawfloor
  3272.  cmp.w d4,d7
  3273.  blt predontdrawfloor
  3274.  cmp.w d4,d1
  3275.  bge.s .nocliptoproof
  3276.  move.w d4,d1
  3277. .nocliptoproof
  3278.  cmp.w d3,d7
  3279.  blt doneclip
  3280.  move.w d3,d7
  3281.  bra doneclip
  3282.  
  3283. clipfloor:
  3284.  move.w botclip,d4
  3285.  sub.w #40,d4
  3286.  cmp.w d4,d1
  3287.  bge predontdrawfloor
  3288.  move.w topclip,d3
  3289.  sub.w #40,d3
  3290.  cmp.w d3,d1
  3291.  bge.s .nocliptopfloor
  3292.  move.w d3,d1
  3293. .nocliptopfloor 
  3294.  cmp.w d3,d7
  3295.  ble predontdrawfloor
  3296.  cmp.w d4,d7
  3297.  blt.s .noclipbotfloor
  3298.  move.w d4,d7
  3299. .noclipbotfloor:
  3300.  
  3301. doneclip:
  3302.  
  3303.  lea (a4,d1*2),a4
  3304. ; move.l #dists,a2
  3305.  move.w distaddr,d0
  3306.  muls #64,d0
  3307.  move.l d0,a2
  3308. ; muls #25,d0
  3309. ; adda.w d0,a2
  3310. ; lea (a2,d1*2),a2
  3311.  sub.w d1,d7
  3312.  ble predontdrawfloor 
  3313.  move.w d1,d0
  3314.  bne.s .notzero
  3315.  moveq #1,d0
  3316. .notzero
  3317.  muls linedir,d1
  3318.  add.l d1,a6
  3319.  move.l #floorscalecols,a1
  3320.  move.l LineToUse,a5
  3321.  
  3322.  tst.b anyclipping
  3323.  beq dofloornoclip
  3324.  
  3325. dofloor:
  3326. ; move.w (a2)+,d0
  3327.  move.w leftclip(pc),d3
  3328.  move.w rightclip(pc),d4
  3329.  move.w rightsidetab-leftsidetab(a4),d2
  3330.  addq #1,d2
  3331.  cmp.w d3,d2
  3332.  ble.s nodrawline
  3333.  cmp.w d4,d2
  3334.  ble.s noclipright
  3335.  move.w d4,d2
  3336. noclipright:
  3337.  move.w (a4),d1
  3338.  cmp.w d4,d1
  3339.  bge.s nodrawline
  3340.  cmp.w d3,d1
  3341.  bge.s noclipleft
  3342.  move.w d3,d1
  3343. noclipleft:
  3344.  cmp.w d1,d2
  3345.  ble.s nodrawline
  3346.  
  3347.  move.w d1,leftedge
  3348.  move.w d2,rightedge
  3349.  
  3350.  move.l a6,a3
  3351.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  3352.  move.l a2,d7
  3353.  divs d0,d7
  3354.  move.w d7,d0
  3355.  jsr (a5)
  3356.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  3357. nodrawline
  3358.  adda.w linedir(pc),a6
  3359.  addq #2,a4
  3360.  addq #1,d0
  3361.  subq #1,d7
  3362.  bgt dofloor
  3363.  
  3364. predontdrawfloor
  3365.  move.l (a7)+,a0
  3366.  
  3367. dontdrawfloor:
  3368.  
  3369.  CACHE_FREEZE_OFF d2
  3370.  rts
  3371.  
  3372. anyclipping: dc.w 0
  3373.  
  3374. dofloornoclip:
  3375. ; move.w (a2)+,d0
  3376.  move.w rightsidetab-leftsidetab(a4),d2
  3377.  addq #1,d2
  3378.  move.w (a4)+,leftedge
  3379.  move.w d2,rightedge
  3380.  
  3381.  move.l a6,a3
  3382.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  3383.  move.l a2,d7
  3384.  divs d0,d7
  3385.  move.w d7,d0
  3386.  jsr (a5)
  3387.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  3388.  adda.w linedir(pc),a6
  3389.  addq #1,d0
  3390.  subq #1,d7
  3391.  bgt dofloornoclip
  3392.  
  3393.  bra predontdrawfloor
  3394.  
  3395.  
  3396. dists:
  3397. ; incbin "floordists"
  3398. drawit: dc.w 0
  3399.  
  3400. LineToUse: dc.l 0
  3401.  
  3402. ***************************
  3403. * Right then, time for the floor
  3404. * routine...
  3405. * For test purposes, give it
  3406. * a3 = point to screen
  3407. * d0= z distance away
  3408. * and sinval+cosval must be set up.
  3409. ***************************
  3410.  
  3411. leftedge: dc.w 0
  3412. rightedge: dc.w 0
  3413.  
  3414. rndpt: dc.l rndtab
  3415.  
  3416. WaterFloorLine:
  3417.  
  3418.  CACHE_OFF d2
  3419.  
  3420.  move.l rndpt,a2
  3421.  move.w (a2)+,d1
  3422.  move.w (a2)+,d2
  3423.  move.w (a2)+,d3
  3424.  cmp.l #endrnd-4,a2
  3425.  blt.s okrnd
  3426.  suba.w #98,a2
  3427. okrnd: 
  3428.  move.l a2,rndpt
  3429.  
  3430.  asr.w #6,d0
  3431.  move.w d0,d1
  3432.  move.w d0,d2
  3433.  move.w d0,d3
  3434.  move.l clipd(pc,d1.w*4),d1
  3435.  move.l clipd(pc,d2.w*4),d2
  3436.  move.l clipd(pc,d3.w*4),d3
  3437.  bra pcli
  3438.  
  3439.  dc.l 0
  3440. clipd:
  3441.  dc.l 0
  3442.  dc.l 512
  3443.  dc.l 512*2
  3444.  dc.l 512*3
  3445.  dc.l 512*4
  3446.  dc.l 512*5
  3447.  dc.l 512*6
  3448.  dc.l 512*7
  3449.  dc.l 512*8
  3450.  dc.l 512*9
  3451.  dc.l 512*10
  3452.  dc.l 512*11
  3453.  dc.l 512*12
  3454.  dc.l 512*13
  3455.  dc.l 512*14
  3456.  dc.l 512*15
  3457.  dc.l 512*15
  3458.  dc.l 512*15
  3459.  dc.l 512*15
  3460.  dc.l 512*15
  3461.  dc.l 512*15
  3462.  dc.l 512*15
  3463.  dc.l 512*15
  3464.  dc.l 512*15
  3465.  dc.l 512*15
  3466.  dc.l 512*15
  3467.  dc.l 512*15
  3468.  
  3469. pcli:
  3470.  
  3471.  move.l #brightentab,a2
  3472.  move.l a2,a4
  3473.  move.l a4,a5
  3474.  add.l d1,a2
  3475.  add.l d2,a4
  3476.  add.l d3,a5
  3477.  
  3478.  move.l #doacrossline,a1
  3479.  move.w leftedge(pc),d1
  3480.  move.w rightedge(pc),d2
  3481.  sub.w d1,d2
  3482.  move.w time(pc,d1.w*2),d1
  3483.  move.w time(pc,d2.w*2),d2
  3484.  lea (a1,d1.w),a1
  3485.  move.w (a1,d2.w),d4
  3486.  move.w #$4e75,(a1,d2.w)
  3487.  
  3488.  moveq #0,d0
  3489.  jsr (a1)
  3490.  move.w d4,(a1,d2.w)
  3491.  
  3492.  CACHE_ON d2
  3493.  
  3494.  rts
  3495.  
  3496. time:
  3497. val SET 0
  3498.  REPT 100
  3499.  dc.w val
  3500. val SET val+10
  3501.  ENDR
  3502.  
  3503. storeit: dc.l 0
  3504.  
  3505. doacrossline:
  3506.  incbin "Doacrossline"
  3507.  rts
  3508.  
  3509. dst: dc.w 0
  3510.  
  3511. FloorLine:
  3512.  
  3513.  move.l #floortile,a0
  3514.  adda.w whichtile,a0
  3515.  move.w lighttype,d1
  3516.  
  3517.  move.w d0,dst
  3518.  
  3519.  move.w d0,d2
  3520. *********************
  3521. * Old version
  3522.  asr.w #6,d2
  3523.  add.w #5,d1
  3524. *********************
  3525. ; asr.w #3,d2
  3526. ; sub.w #4,d2
  3527. ; cmp.w #6,d2
  3528. ; blt.s flbrbr
  3529. ; move.w #6,d2
  3530. ;flbrbr:
  3531. *********************
  3532.  add.w d2,d1
  3533.  bge.s .fixedbright
  3534.  moveq #0,d1
  3535. .fixedbright:
  3536.  cmp.w #28,d1
  3537.  ble.s .smallbright
  3538.  move.w #28,d1
  3539. .smallbright:
  3540.  lea floorscalecols,a1
  3541.  add.l floorbright(pc,d1.w*4),a1
  3542.  bra pastfloorbright
  3543.  
  3544. ConstCol: dc.w 0
  3545.  
  3546. BumpLine:
  3547.  
  3548.  tst.b smoothbumps
  3549.  beq.s Chunky
  3550.  
  3551.  move.l #SmoothTile,a0
  3552.  lea Smoothscalecols,a1
  3553.  bra pastast
  3554.  
  3555. Chunky:
  3556.  
  3557.  moveq #0,d2
  3558.  move.l #Bumptile,a0
  3559.  move.w whichtile,d2
  3560.  adda.w d2,a0
  3561.  ror.l #2,d2
  3562.  lsr.w #6,d2
  3563.  rol.l #2,d2
  3564.  and.w #15,d2
  3565.  move.l #ConstCols,a1
  3566.  move.w (a1,d2.w*2),ConstCol
  3567.  lea Bumpscalecols,a1
  3568.  
  3569. pastast:
  3570.  move.w lighttype,d1
  3571.  
  3572.  move.w d0,dst
  3573.  
  3574.  move.w d0,d2
  3575. *********************
  3576. * Old version
  3577.  asr.w #6,d2
  3578.  add.w #5,d1
  3579. *********************
  3580. ; asr.w #3,d2
  3581. ; sub.w #4,d2
  3582. ; cmp.w #6,d2
  3583. ; blt.s flbrbr
  3584. ; move.w #6,d2
  3585. ;flbrbr:
  3586. *********************
  3587.  add.w d2,d1
  3588.  bge.s .fixedbright
  3589.  moveq #0,d1
  3590. .fixedbright:
  3591.  cmp.w #28,d1
  3592.  ble.s .smallbright
  3593.  move.w #28,d1
  3594. .smallbright:
  3595.  add.l floorbright(pc,d1.w*4),a1
  3596.  bra pastfloorbright
  3597.  
  3598.  
  3599. floorbright:
  3600.  dc.l 512*0
  3601.  dc.l 512*1
  3602.  dc.l 512*1
  3603.  dc.l 512*2
  3604.  dc.l 512*2
  3605.  
  3606.  dc.l 512*3
  3607.  dc.l 512*3
  3608.  dc.l 512*4
  3609.  dc.l 512*4
  3610.  dc.l 512*5
  3611.  
  3612.  dc.l 512*5
  3613.  dc.l 512*6
  3614.  dc.l 512*6
  3615.  dc.l 512*7
  3616.  dc.l 512*7
  3617.  
  3618.  dc.l 512*8
  3619.  dc.l 512*8
  3620.  dc.l 512*9
  3621.  dc.l 512*9
  3622.  dc.l 512*10
  3623.  
  3624.  dc.l 512*10
  3625.  dc.l 512*11
  3626.  dc.l 512*11
  3627.  dc.l 512*12
  3628.  dc.l 512*12
  3629.  
  3630.  dc.l 512*13
  3631.  dc.l 512*13
  3632.  dc.l 512*14
  3633.  dc.l 512*14
  3634.  
  3635. widthleft: dc.w 0
  3636. scaleval: dc.w 0
  3637. sxoff: dc.w 0
  3638. szoff: dc.w 0
  3639. xoff34: dc.w 0
  3640. zoff34: dc.w 0
  3641. scosval: dc.w 0
  3642. ssinval: dc.w 0
  3643.  
  3644.  
  3645. floorsetbright:
  3646.  move.l #walltiles,a0
  3647.  
  3648. pastfloorbright
  3649.  
  3650.  
  3651.  move.w d0,d1
  3652.  muls cosval,d1    ; change in x across whole width
  3653.  move.w d0,d2
  3654.  muls sinval,d2    ; change in z across whole width
  3655.  neg.l d2
  3656. scaleprog:
  3657.  move.w scaleval(pc),d3
  3658.  beq.s .samescale
  3659.  bgt.s .scaledown
  3660.  neg.w d3
  3661.  asr.l d3,d1
  3662.  asr.l d3,d2
  3663.  bra.s .samescale
  3664. .scaledown:
  3665.  asl.l d3,d1
  3666.  asl.l d3,d2
  3667. .samescale
  3668.  
  3669.  move.l d1,d3 ;    z cos
  3670.  move.l d3,d6
  3671.  move.l d3,d5
  3672.  asr.l #1,d6
  3673.  add.l d6,d3
  3674.  asr.l #1,d3
  3675.  
  3676.  move.l d2,d4    ; z sin
  3677.  move.l d4,d6
  3678.  asr.l #1,d6
  3679.  add.l d4,d6
  3680.  add.l d3,d4
  3681.  neg.l d4    ; start x
  3682.  
  3683.  asr.l #1,d6    ; zsin/2
  3684.  sub.l d6,d5    ; start z
  3685.  
  3686.  move.w d4,startsmoothx
  3687.  move.w d5,startsmoothz
  3688.  
  3689.  swap d4
  3690.  asr.l #8,d5
  3691.  add.w szoff,d5
  3692.  add.w sxoff,d4
  3693.  and.w #63,d4
  3694.  and.w #63*256,d5
  3695.  move.b d4,d5
  3696.  
  3697.  asr.l #6,d1
  3698.  asr.l #6,d2
  3699.  move.w leftedge(pc),d6
  3700.  beq.s nomultleft
  3701.  
  3702.  move.l d1,d3
  3703.  asr.l #6,d3
  3704.  muls d6,d3
  3705.  asl.l #6,d3
  3706.  swap d3
  3707.  add.b d3,d5
  3708.  
  3709.  move.l d2,d3
  3710.  asr.l #6,d3
  3711.  muls d6,d3
  3712.  asl.l #6,d3
  3713.  swap d3
  3714.  lsl.w #8,d3
  3715.  add.w d3,d5
  3716.  
  3717. nomultleft:
  3718.  
  3719.  move.w d1,a4
  3720.  move.w d2,a5
  3721.  asr.l #8,d2
  3722.  and.w #%0011111100000000,d2
  3723.  swap d1
  3724.  add.w d1,d2
  3725.  move.w #%11111100111111,d1
  3726.  and.w d1,d5
  3727.  swap d5
  3728.  move.w startsmoothz,d5
  3729.  swap d5
  3730.  swap d2
  3731.  move.w a5,d2
  3732.  swap d2
  3733.  
  3734. ***********************************
  3735.  
  3736.  move.w d6,a2
  3737.  move.l d2,d6
  3738.  add.w #256,d6
  3739.  
  3740.  moveq #0,d0
  3741.  
  3742.  tst.w a2
  3743.  beq startatleftedge
  3744.  
  3745.  move.w widthleft(pc),d4
  3746.  
  3747.  move.w rightedge(pc),d3
  3748.  
  3749.  cmp.w #31,a2
  3750.  bgt.s notinfirststrip
  3751.  lea (a3,a2.w*4),a3
  3752.  cmp.w #32,d3
  3753.  ble.s allinfirststrip
  3754.  move.w #32,d7
  3755.  sub.w d7,d3
  3756.  sub.w a2,d7
  3757.  bra intofirststrip
  3758.  
  3759. allinfirststrip
  3760.  sub.w a2,d3
  3761.  move.w d3,d7
  3762.  move.w #0,d4
  3763.  bra allintofirst
  3764.  
  3765. notinfirststrip:
  3766.  sub.w #32,a2
  3767.  sub.w #32,d3
  3768.  adda.w #33*4,a3
  3769.  cmp.w #31,a2
  3770.  bgt.s notstartinsec
  3771.  lea (a3,a2.w*4),a3
  3772.  cmp.w #32,d3
  3773.  ble.s allinsecstrip
  3774.  move.w #32,d7
  3775.  sub.w d7,d3
  3776.  sub.w a2,d7
  3777.  move.w d3,d4
  3778.  bra tstwat
  3779.  
  3780. allinsecstrip
  3781.  sub.w a2,d3
  3782.  move.w d3,d7
  3783.  move.w #0,d4
  3784.  bra tstwat
  3785.  rts
  3786.  
  3787. prot8: dc.w 0
  3788.  
  3789. notstartinsec:
  3790.  sub.w #32,a2
  3791.  sub.w #32,d3
  3792.  adda.w #33*4,a3
  3793.  lea (a3,a2.w*4),a3
  3794.  cmp.w #32,d3
  3795.  ble.s allinthirdstrip
  3796.  move.w #32,d7
  3797.  sub.w d7,d3
  3798.  sub.w a2,d7
  3799.  move.w d3,d4
  3800.  bra tstwat
  3801.  rts
  3802.  
  3803. allinthirdstrip
  3804.  sub.w a2,d3
  3805.  move.w d3,d7
  3806.  move.w #0,d4
  3807.  bra tstwat
  3808.  rts
  3809.  
  3810. startatleftedge:
  3811.  
  3812.  move.w rightedge(pc),d3
  3813.  sub.w a2,d3
  3814.  
  3815.  move.w d3,d7
  3816.  cmp.w #32,d7
  3817.  ble.s .notoowide
  3818.  move.w #32,d7
  3819. .notoowide:
  3820.  sub.w d7,d3
  3821. intofirststrip:
  3822.  
  3823.  move.w d3,d4
  3824. allintofirst:
  3825.  
  3826.  move.w startsmoothx,d3
  3827.  
  3828. tstwat:
  3829.  
  3830.  tst.b usewater
  3831.  bne texturedwater
  3832.  
  3833.  
  3834. ******************************
  3835. * BumpMap the floor/ceiling! *
  3836.  tst.b usebumps
  3837.  bne.s BumpMap
  3838. ******************************
  3839.  
  3840. ordinary:
  3841.  moveq #0,d0
  3842.  
  3843.  dbra d7,acrossscrn
  3844.  rts
  3845.  
  3846. usebumps: dc.w $0
  3847. smoothbumps: dc.w $0
  3848.  
  3849.  include "ab3:source/bumpmap.s"
  3850.  
  3851.  CNOP 0,4
  3852. backbefore:
  3853.  and.w d1,d5
  3854.  move.b (a0,d5.w*4),d0
  3855.  move.w (a1,d0.w*2),(a3)
  3856.  addq #4,a3
  3857.  add.w a4,d3
  3858.  addx.l d6,d5
  3859.  dbcs d7,acrossscrn
  3860.  dbcc d7,backbefore
  3861.  bcc.s past1
  3862.  add.w #256,d5 
  3863.  bra.s past1
  3864.  
  3865. acrossscrn:
  3866.  and.w d1,d5
  3867.  move.b (a0,d5.w*4),d0
  3868.  move.w (a1,d0.w*2),(a3)
  3869.  addq #4,a3
  3870.  add.w a4,d3
  3871.  addx.l d2,d5
  3872.  dbcs d7,acrossscrn
  3873.  dbcc d7,backbefore
  3874.  bcc.s past1
  3875.  add.w #256,d5 
  3876. past1:
  3877.  
  3878.  move.w d4,d7
  3879.  bne.s .notdoneyet
  3880.  CACHE_FREEZE_ON d2
  3881.  rts
  3882. .notdoneyet:
  3883.  
  3884.  cmp.w #32,d7
  3885.  ble.s .notoowide
  3886.  move.w #32,d7
  3887. .notoowide
  3888.  sub.w d7,d4  
  3889.  addq #4,a3
  3890.  
  3891.  dbra d7,acrossscrn
  3892.  CACHE_FREEZE_ON d2
  3893.  rts
  3894.  
  3895. waterpt: dc.l waterlist
  3896.  
  3897. waterlist:
  3898.  dc.l waterfile
  3899.  dc.l waterfile+2
  3900.  dc.l waterfile+256
  3901.  dc.l waterfile+256+2
  3902.  dc.l waterfile+512
  3903.  dc.l waterfile+512+2
  3904.  dc.l waterfile+768
  3905.  dc.l waterfile+768+2
  3906. ; dc.l waterfile+768
  3907. ; dc.l waterfile+512+2
  3908. ; dc.l waterfile+512
  3909. ; dc.l waterfile+256+2
  3910. ; dc.l waterfile+256
  3911. ; dc.l waterfile+2
  3912. endwaterlist:
  3913.  
  3914. watertouse: dc.l waterfile
  3915.  
  3916. wtan: dc.w 0
  3917. wateroff: dc.w 0
  3918.  
  3919. texturedwater:
  3920.  
  3921.  add.w wateroff,d5
  3922.  
  3923.  move.l #brightentab,a1
  3924.  move.w dst,d0
  3925.  clr.b d0
  3926.  add.w d0,d0
  3927.  adda.w d0,a1
  3928.  
  3929.  move.w dst,d0
  3930.  asl.w #7,d0
  3931.  add.w wtan,d0
  3932.  and.w #8191,d0
  3933.  move.l #SineTable,a0
  3934.  move.w (a0,d0.w),d0
  3935.  ext.l d0
  3936.  move.w dst,d3
  3937.  add.w #300,d3
  3938.  divs d3,d0
  3939.  asr.w #6,d0
  3940.  add.w #2,d0
  3941.  
  3942.  move.w dst,d3
  3943.  asr.w #7,d3
  3944.  add.w d3,d0
  3945.  
  3946.  muls #104*4,d0
  3947.  move.w d0,a6
  3948.  
  3949.  move.l watertouse,a0
  3950.  
  3951.  move.w startsmoothx,d3
  3952.  dbra d7,acrossscrnw
  3953.  rts
  3954.  
  3955. backbeforew:
  3956.  and.w d1,d5
  3957.  move.w (a0,d5.w*4),d0
  3958.  move.b 1(a3,a6.w),d0
  3959.  move.w (a1,d0.w*2),(a3)
  3960.  addq #4,a3
  3961.  add.w a4,d3
  3962.  addx.l d6,d5
  3963.  dbcs d7,acrossscrnw
  3964.  dbcc d7,backbeforew
  3965.  bcc.s past1w
  3966.  add.w #256,d5 
  3967.  bra.s past1w
  3968.  
  3969. acrossscrnw:
  3970.  and.w d1,d5
  3971.  move.w (a0,d5.w*4),d0
  3972.  move.b 1(a3,a6.w),d0
  3973.  move.w (a1,d0.w*2),(a3)
  3974.  addq #4,a3
  3975.  add.w a4,d3
  3976.  addx.l d2,d5
  3977.  dbcs d7,acrossscrnw
  3978.  dbcc d7,backbeforew
  3979.  bcc.s past1w
  3980.  add.w #256,d5 
  3981. past1w:
  3982.  
  3983.  move.w d4,d7
  3984.  bne.s .notdoneyet
  3985.  rts
  3986. .notdoneyet:
  3987.  
  3988.  cmp.w #32,d7
  3989.  ble.s .notoowide
  3990.  move.w #32,d7
  3991. .notoowide
  3992.  sub.w d7,d4  
  3993.  addq #4,a3
  3994.  
  3995.  dbra d7,acrossscrnw
  3996.  CACHE_FREEZE_ON d2
  3997.  rts
  3998.  
  3999. usewater: dc.w 0
  4000. startsmoothx: dc.w 0
  4001. startsmoothz: dc.w 0
  4002.  
  4003. ********************************
  4004. *
  4005.  include "AB3:source/ObjDraw3.chipram"
  4006. *
  4007. ********************************
  4008.  
  4009. numframes:
  4010.  dc.w 0
  4011.  
  4012. alframe: dc.l Objects+4096
  4013.  
  4014. alan:
  4015.  dcb.l 4,0
  4016.  dcb.l 4,1
  4017.  dcb.l 4,2
  4018.  dcb.l 4,3
  4019. endalan:
  4020.  
  4021. alanptr: dc.l alan
  4022.  
  4023. Time2: dc.l 0
  4024. dispco:
  4025.  dc.w 0
  4026.  
  4027. KInt_Init    ;VBR Assumed $0
  4028.         move.l $68.w,OLDKINT
  4029.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  4030.         And.b    #$3f,$bfe201        Set Timers
  4031.         Move.b    #$7f,$bfed01
  4032.         Move.b    $bfed01,d0
  4033.         Move.b    #$88,$bfed01
  4034.         St.b    KInt_CCode        
  4035.         Move.b    #$a0,$bfee01        Start Timey Thing
  4036.         Rts                And return
  4037.  
  4038. OLDKINT: dc.l 0
  4039.  
  4040. KInt_Main    
  4041.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  4042.         Move.w    #8,$dff09a        Temp Disable Int.
  4043.         Move.w    $dff01e,d0        Intreqr
  4044.         And.w    #8,d0            Mask Out All X^ K_Int
  4045.     Beq    KInt_End            Not Keyboard Interrupt
  4046.         Lea    $bfed01,a6
  4047.         Move.w    #$8,$dff09c        Clear Int.Request
  4048.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  4049.         Ror.b    #1,d0            Roll to correct
  4050.         Not.b    d0            
  4051.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  4052. .HandShake    Move.b    #8,(a6)
  4053.         Move.b    #7,-$900(a6)
  4054.         Move.b    #0,-$800(a6)
  4055.         Move.b    #0,-$100(a6)
  4056.         Move.b    #$d1,$100(a6)        
  4057.         Tst.b    (a6)    
  4058. .wait        Btst    #0,(a6)
  4059.     Beq.s    .wait
  4060.         Move.b    #$a0,$100(a6)        
  4061.         Move.b    (a6),d0        
  4062.         Move.b    #$88,(a6)
  4063.         Lea    KeyMap,a1
  4064.         Moveq.w    #0,d0
  4065.         Move.b    KInt_CCode(pc),d0
  4066.     Bmi.s    KInt_KeyUp            neg if up 
  4067.  
  4068. KInt_KeyDown
  4069.         st (a1,d0.w)
  4070.     Bra    KInt_End
  4071.  
  4072. KInt_KeyUp
  4073.         And.w    #$7f,d0            Make code Positive
  4074.         clr.b (a1,d0.w)
  4075. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  4076.     
  4077.         Move.w    #$8008,$dff09a        Re-enable Int.
  4078.         Rte
  4079.  
  4080. KInt_CCode    Ds.b    1
  4081. KInt_Askey    Ds.b    1
  4082. KInt_OCode    Ds.w    1
  4083.  
  4084.  
  4085. PLR1_mouse_control
  4086.  jsr ReadMouse
  4087.  jsr PLR1_alwayskeys
  4088.  move.l #SineTable,a0
  4089.  move.w PLR1s_angspd,d1
  4090.  move.w PLR1s_angpos,d0
  4091.  and.w #8190,d0
  4092.  move.w (a0,d0.w),PLR1s_sinval
  4093.  adda.w #2048,a0
  4094.  move.w (a0,d0.w),PLR1s_cosval
  4095.  
  4096.  move.l PLR1s_xspdval,d6
  4097.  move.l PLR1s_zspdval,d7
  4098.  
  4099.  neg.l d6
  4100.  ble.s .nobug1
  4101.  asr.l #1,d6
  4102.  add.l #1,d6
  4103.  bra.s .bug1
  4104. .nobug1
  4105.  asr.l #1,d6
  4106. .bug1:
  4107.  
  4108.  neg.l d7
  4109.  ble.s .nobug2
  4110.  asr.l #1,d7
  4111.  add.l #1,d7
  4112.  bra.s .bug2
  4113. .nobug2
  4114.  asr.l #1,d7
  4115. .bug2: 
  4116.  
  4117.  
  4118.  move.w ymouse,d3
  4119.  sub.w oldymouse,d3
  4120.  add.w d3,oldymouse
  4121.  asr.w #1,d3
  4122.  cmp.w #50,d3
  4123.  ble.s nofastfor
  4124.  move.w #50,d3
  4125. nofastfor:
  4126.  cmp.w #-50,d3
  4127.  bge.s nofastback
  4128.  move.w #-50,d3
  4129. nofastback:
  4130.  
  4131.  tst.b Ducked
  4132.  beq.s .nohalve
  4133.  asr.w #1,d3
  4134. .nohalve
  4135.  
  4136.  move.w d3,d2
  4137.  asl.w #3,d2
  4138.  move.w d2,d1
  4139.  add.w d2,d1
  4140.  add.w d2,d1
  4141.  add.w Bobble,d1
  4142.  and.w #8190,d1
  4143.  move.w d1,Bobble
  4144.  
  4145.  move.w PLR1s_sinval,d1
  4146.  move.w PLR1s_cosval,d2
  4147.  
  4148.  move.w d2,d4
  4149.  move.w d1,d5
  4150.  muls lrs,d4
  4151.  muls lrs,d5
  4152.  
  4153.  
  4154.  muls d3,d2
  4155.  muls d3,d1
  4156.  sub.l d4,d1
  4157.  add.l d5,d2
  4158.  
  4159.  sub.l d1,d6
  4160.  sub.l d2,d7
  4161.  add.l d6,PLR1s_xspdval
  4162.  add.l d7,PLR1s_zspdval
  4163.  move.l PLR1s_xspdval,d6
  4164.  move.l PLR1s_zspdval,d7
  4165.  add.l d6,PLR1s_xoff
  4166.  add.l d7,PLR1s_zoff
  4167.  
  4168.  tst.b PLR1_fire
  4169.  beq.s .firenotpressed
  4170. ; fire was pressed last time.
  4171.  btst #6,$bfe001
  4172.  bne.s .firenownotpressed
  4173. ; fire is still pressed this time.
  4174.  st PLR1_fire
  4175.  bra .doneplr1
  4176.  
  4177. .firenownotpressed:
  4178. ; fire has been released.
  4179.  clr.b PLR1_fire
  4180.  bra .doneplr1
  4181.  
  4182. .firenotpressed
  4183.  
  4184. ; fire was not pressed last frame...
  4185.  
  4186.  btst #6,$bfe001
  4187. ; if it has still not been pressed, go back above
  4188.  bne.s .firenownotpressed
  4189. ; fire was not pressed last time, and was this time, so has
  4190. ; been clicked.
  4191.  st PLR1_clicked
  4192.  st PLR1_fire
  4193.  
  4194. .doneplr1:
  4195.  move.l PLR1s_tyoff,d0
  4196.  move.l PLR1s_yoff,d1
  4197.  move.l PLR1s_yvel,d2
  4198.  sub.l d1,d0
  4199.  bgt.s .aboveground
  4200.  sub.l #1024,d2
  4201.  blt.s .notfast
  4202.  sub.l #2048,d2
  4203. .notfast:
  4204.  add.l d2,d1
  4205.  sub.l d2,d0
  4206.  blt.s .pastitall
  4207.  move.l #0,d2
  4208.  add.l d0,d1
  4209.  bra.s .pastitall
  4210.  
  4211. .aboveground:
  4212.  add.l d2,d1
  4213.  add.l #1024,d2
  4214. .pastitall:
  4215.  
  4216.  move.l d2,PLR1s_yvel
  4217.  move.l d1,PLR1s_yoff
  4218.  
  4219.  rts
  4220.  
  4221. PLR1_follow_path:
  4222.  
  4223.  move.l pathpt,a0
  4224.  move.w (a0),d1
  4225.  move.w d1,PLR1s_xoff
  4226.  move.w 2(a0),d1
  4227.  move.w d1,PLR1s_zoff
  4228.  move.w 4(a0),d0
  4229.  add.w d0,d0
  4230.  and.w #8190,d0
  4231.  move.w d0,PLR1_angpos
  4232.  
  4233.  move.w TempFrames,d0
  4234.  asl.w #3,d0
  4235.  adda.w d0,a0
  4236.  
  4237.  cmp.l #endpath,a0
  4238.  blt notrestartpath
  4239.  move.l #Path,a0
  4240. notrestartpath:
  4241.  move.l a0,pathpt
  4242.  
  4243.  rts
  4244.  
  4245. OldSpace: dc.b 0
  4246. SpaceTapped: dc.b 0
  4247. SPCTAP: dc.b 0
  4248. Ducked: dc.b 0
  4249.  even
  4250.  
  4251. PLR1_alwayskeys
  4252.  move.l #KeyMap,a5
  4253.  move.b $40(a5),d1
  4254.  beq.s nottapped
  4255.  tst.b OldSpace
  4256.  bne.s nottapped
  4257.  st SpaceTapped
  4258. nottapped:
  4259.  move.b d1,OldSpace
  4260.  
  4261.  tst.b $22(a5)
  4262.  beq.s notduck
  4263.  clr.b $22(a5)
  4264.  move.l #playerheight,PLR1s_targheight
  4265.  not.b Ducked
  4266.  beq.s notduck
  4267.  move.l #playercrouched,PLR1s_targheight
  4268. notduck:
  4269.  
  4270.  move.l PLR1_Roompt,a4
  4271.  move.l ToZoneFloor(a4),d0
  4272.  sub.l ToZoneRoof(a4),d0
  4273.  tst.b PLR1_StoodInTop
  4274.  beq.s usebottom
  4275.  move.l ToUpperFloor(a4),d0
  4276.  sub.l ToUpperRoof(a4),d0
  4277. usebottom:
  4278.  
  4279.  cmp.l #playerheight+3*1024,d0
  4280.  bgt.s oktostand
  4281.  st Ducked
  4282.  move.l #playercrouched,PLR1s_targheight
  4283. oktostand:
  4284.  
  4285.  move.l PLR1s_height,d0
  4286.  move.l PLR1s_targheight,d1
  4287.  cmp.l d1,d0
  4288.  beq.s noupordown
  4289.  bgt.s crouch
  4290.  add.l #1024,d0
  4291.  bra noupordown
  4292. crouch:
  4293.  sub.l #1024,d0
  4294. noupordown:
  4295.  move.l d0,PLR1s_height
  4296.  
  4297.  tst.b $27(a5)
  4298.  beq.s notselkey
  4299.  st PLR1KEYS
  4300.  clr.b PLR1PATH
  4301.  clr.b PLR1MOUSE
  4302.  clr.b PLR1JOY
  4303. notselkey:
  4304.  
  4305.  tst.b $26(a5)
  4306.  beq.s notseljoy
  4307.  clr.b PLR1KEYS
  4308.  clr.b PLR1PATH
  4309.  clr.b PLR1MOUSE
  4310.  st PLR1JOY
  4311. notseljoy:
  4312.  
  4313.  tst.b $37(a5)
  4314.  beq.s notselmouse
  4315.  clr.b PLR1KEYS
  4316.  clr.b PLR1PATH
  4317.  st PLR1MOUSE
  4318.  clr.b PLR1JOY
  4319. notselmouse:
  4320.  
  4321.  lea 1(a5),a4
  4322.  lea GunData,a3
  4323.  moveq #0,d0
  4324.  move.w #4,d1
  4325. pickweap
  4326.  tst.b (a4)+
  4327.  beq.s notgotweap
  4328.  tst.b 7(a3)
  4329.  beq.s notgotweap
  4330.  move.b d0,GunSelected
  4331. notgotweap
  4332.  addq #1,d0
  4333.  adda.w #16,a3
  4334.  dbra d1,pickweap
  4335.  
  4336.  rts
  4337.  
  4338. PLR1_keyboard_control:
  4339.  
  4340.  move.l #SineTable,a0
  4341.  
  4342.  jsr PLR1_alwayskeys
  4343.  move.l #KeyMap,a5
  4344.  
  4345.  move.w PLR1s_angpos,d0
  4346.  move.w #70,d1
  4347.  move.w #7,d2
  4348.  tst.b $61(a5)
  4349.  beq.s nofaster
  4350.  move.w #120,d1
  4351.  move.w #10,d2
  4352. nofaster:
  4353.  tst.b Ducked
  4354.  beq.s .nohalve
  4355.  asr.w #1,d2
  4356. .nohalve
  4357.  
  4358.  moveq #0,d4 
  4359. ; tst.b $67(a5)
  4360. ; bne.s slidelr
  4361.  
  4362.  tst.b $4f(a5)
  4363.  beq.s noleftturn
  4364.  sub.w d1,d0
  4365. noleftturn
  4366.  move.l #KeyMap,a5
  4367.  tst.b $4e(a5)
  4368.  beq.s norightturn
  4369.  add.w d1,d0
  4370. norightturn
  4371. ; bra.s noslide
  4372.  
  4373. slidelr:
  4374.  tst.b $39(a5)
  4375.  beq.s noleftslide
  4376.  move.w d2,d4
  4377.  asr.w #1,d4
  4378. noleftslide
  4379.  move.l #KeyMap,a5
  4380.  tst.b $3a(a5)
  4381.  beq.s norightslide
  4382.  sub.w d2,d4
  4383.  asr.w #1,d4
  4384. norightslide
  4385.   
  4386. noslide:
  4387.   
  4388.  and.w #8191,d0
  4389.  move.w d0,PLR1s_angpos
  4390.  
  4391.  move.w (a0,d0.w),PLR1s_sinval
  4392.  adda.w #2048,a0
  4393.  move.w (a0,d0.w),PLR1s_cosval
  4394.  
  4395.  move.l PLR1s_xspdval,d6
  4396.  move.l PLR1s_zspdval,d7
  4397.  
  4398.  neg.l d6
  4399.  ble.s .nobug1
  4400.  asr.l #1,d6
  4401.  add.l #1,d6
  4402.  bra.s .bug1
  4403. .nobug1
  4404.  asr.l #1,d6
  4405. .bug1:
  4406.  
  4407.  neg.l d7
  4408.  ble.s .nobug2
  4409.  asr.l #1,d7
  4410.  add.l #1,d7
  4411.  bra.s .bug2
  4412. .nobug2
  4413.  asr.l #1,d7
  4414. .bug2: 
  4415.  
  4416.  moveq #0,d3
  4417.  
  4418.  tst.b $4c(a5)
  4419.  beq.s noforward
  4420.  neg.w d2
  4421.  move.w d2,d3
  4422.  
  4423. noforward:
  4424.  tst.b $4d(a5)
  4425.  beq.s nobackward
  4426.  move.w d2,d3
  4427. nobackward:
  4428.  
  4429.  move.w d3,d2
  4430.  asl.w #3,d2
  4431.  move.w d2,d1
  4432.  add.w d2,d1
  4433.  add.w d2,d1
  4434.  add.w Bobble,d1
  4435.  and.w #8190,d1
  4436.  move.w d1,Bobble
  4437.  
  4438.  move.w PLR1s_sinval,d1
  4439.  muls d3,d1
  4440.  move.w PLR1s_cosval,d2
  4441.  muls d3,d2
  4442.  
  4443.  sub.l d1,d6
  4444.  sub.l d2,d7
  4445.  move.w PLR1s_sinval,d1
  4446.  muls d4,d1
  4447.  move.w PLR1s_cosval,d2
  4448.  muls d4,d2
  4449.  sub.l d2,d6
  4450.  add.l d1,d7
  4451.  
  4452.  add.l d6,PLR1s_xspdval
  4453.  add.l d7,PLR1s_zspdval
  4454.  move.l PLR1s_xspdval,d6
  4455.  move.l PLR1s_zspdval,d7
  4456.  add.l d6,PLR1s_xoff
  4457.  add.l d7,PLR1s_zoff
  4458.  
  4459.  tst.b PLR1_fire
  4460.  beq.s .firenotpressed
  4461. ; fire was pressed last time.
  4462.  tst.b $65(a5)
  4463.  beq.s .firenownotpressed
  4464. ; fire is still pressed this time.
  4465.  st PLR1_fire
  4466.  bra .doneplr1
  4467.  
  4468. .firenownotpressed:
  4469. ; fire has been released.
  4470.  clr.b PLR1_fire
  4471.  bra .doneplr1
  4472.  
  4473. .firenotpressed
  4474.  
  4475. ; fire was not pressed last frame...
  4476.  
  4477.  tst.b $65(a5)
  4478. ; if it has still not been pressed, go back above
  4479.  beq.s .firenownotpressed
  4480. ; fire was not pressed last time, and was this time, so has
  4481. ; been clicked.
  4482.  st PLR1_clicked
  4483.  st PLR1_fire
  4484.  
  4485. .doneplr1:
  4486.  
  4487.  move.l PLR1s_tyoff,d0
  4488.  move.l PLR1s_yoff,d1
  4489.  move.l PLR1s_yvel,d2
  4490.  sub.l d1,d0
  4491.  bgt.s .aboveground
  4492.  sub.l #512,d2
  4493.  blt.s .notfast
  4494.  move.l #0,d2
  4495. .notfast:
  4496.  add.l d2,d1
  4497.  sub.l d2,d0
  4498.  blt.s .pastitall
  4499.  move.l #0,d2
  4500.  add.l d0,d1
  4501.  bra.s .pastitall
  4502.  
  4503. .aboveground:
  4504.  add.l d2,d1
  4505.  add.l #1024,d2
  4506. .pastitall:
  4507.  
  4508.  move.l d2,PLR1s_yvel
  4509.  move.l d1,PLR1s_yoff
  4510.  
  4511.  rts
  4512. passspace:
  4513.  ds.l 400 
  4514.  
  4515. PLR1_JoyStick_control:
  4516.  
  4517.  move.l #KeyMap,a5
  4518.  move.l #SineTable,a0
  4519.  
  4520.  btst #1,$dff00c
  4521.  sne d0
  4522.  btst #1,$dff00d
  4523.  sne d1
  4524.  btst #0,$dff00c
  4525.  sne d2
  4526.  btst #0,$dff00d
  4527.  sne d3
  4528.  btst #7,$bfe001
  4529.  seq $65(a5)
  4530.  
  4531.  move.b d0,$4f(a5)
  4532.  move.b d1,$4e(a5)
  4533.  eor.b d0,d2
  4534.  move.b d2,$4c(a5)
  4535.  eor.b d1,d3
  4536.  move.b d3,$4d(a5)
  4537.  
  4538.  jsr PLR1_alwayskeys
  4539.  
  4540.  move.w PLR1s_angpos,d0
  4541.  move.w #70,d1
  4542.  move.w #7,d2
  4543.  tst.b $61(a5)
  4544.  beq.s .nofaster
  4545.  move.w #120,d1
  4546.  move.w #10,d2
  4547. .nofaster:
  4548.  
  4549.  tst.b Ducked
  4550.  beq.s .nohalve
  4551.  asr.w #1,d2
  4552. .nohalve:
  4553.  
  4554.  moveq #0,d4 
  4555. ; tst.b $67(a5)
  4556. ; bne.s slidelr
  4557.  
  4558.  tst.b $4f(a5)
  4559.  beq.s .noleftturn
  4560.  sub.w d1,d0
  4561. .noleftturn
  4562.  move.l #KeyMap,a5
  4563.  tst.b $4e(a5)
  4564.  beq.s .norightturn
  4565.  add.w d1,d0
  4566. .norightturn
  4567. ; bra.s noslide
  4568.  
  4569. .slidelr:
  4570.  tst.b $39(a5)
  4571.  beq.s .noleftslide
  4572.  move.w d2,d4
  4573.  asr.w #1,d4
  4574. .noleftslide
  4575.  move.l #KeyMap,a5
  4576.  tst.b $3a(a5)
  4577.  beq.s .norightslide
  4578.  sub.w d2,d4
  4579.  asr.w #1,d4
  4580. .norightslide
  4581.   
  4582. .noslide:
  4583.   
  4584.  and.w #8191,d0
  4585.  move.w d0,PLR1s_angpos
  4586.  
  4587.  move.w (a0,d0.w),PLR1s_sinval
  4588.  adda.w #2048,a0
  4589.  move.w (a0,d0.w),PLR1s_cosval
  4590.  
  4591.  move.l PLR1s_xspdval,d6
  4592.  move.l PLR1s_zspdval,d7
  4593.  
  4594.  neg.l d6
  4595.  ble.s .nobug1
  4596.  asr.l #1,d6
  4597.  add.l #1,d6
  4598.  bra.s .bug1
  4599. .nobug1
  4600.  asr.l #1,d6
  4601. .bug1:
  4602.  
  4603.  neg.l d7
  4604.  ble.s .nobug2
  4605.  asr.l #1,d7
  4606.  add.l #1,d7
  4607.  bra.s .bug2
  4608. .nobug2
  4609.  asr.l #1,d7
  4610. .bug2: 
  4611.  
  4612.  moveq #0,d3
  4613.  
  4614.  tst.b $4c(a5)
  4615.  beq.s .noforward
  4616.  neg.w d2
  4617.  move.w d2,d3
  4618. .noforward:
  4619.  tst.b $4d(a5)
  4620.  beq.s .nobackward
  4621.  move.w d2,d3
  4622. .nobackward:
  4623.  
  4624.  move.w d3,d2
  4625.  asl.w #3,d2
  4626.  move.w d2,d1
  4627.  add.w d2,d1
  4628.  add.w d2,d1
  4629.  add.w Bobble,d1
  4630.  and.w #8190,d1
  4631.  move.w d1,Bobble
  4632.  
  4633.  move.w PLR1s_sinval,d1
  4634.  muls d3,d1
  4635.  move.w PLR1s_cosval,d2
  4636.  muls d3,d2
  4637.  
  4638.  sub.l d1,d6
  4639.  sub.l d2,d7
  4640.  move.w PLR1s_sinval,d1
  4641.  muls d4,d1
  4642.  move.w PLR1s_cosval,d2
  4643.  muls d4,d2
  4644.  sub.l d2,d6
  4645.  add.l d1,d7
  4646.  
  4647.  add.l d6,PLR1s_xspdval
  4648.  add.l d7,PLR1s_zspdval
  4649.  move.l PLR1s_xspdval,d6
  4650.  move.l PLR1s_zspdval,d7
  4651.  add.l d6,PLR1s_xoff
  4652.  add.l d7,PLR1s_zoff
  4653.  
  4654.  tst.b PLR1_fire
  4655.  beq.s .firenotpressed
  4656. ; fire was pressed last time.
  4657.  tst.b $65(a5)
  4658.  beq.s .firenownotpressed
  4659. ; fire is still pressed this time.
  4660.  st PLR1_fire
  4661.  bra .doneplr1
  4662.  
  4663. .firenownotpressed:
  4664. ; fire has been released.
  4665.  clr.b PLR1_fire
  4666.  bra .doneplr1
  4667.  
  4668. .firenotpressed
  4669.  
  4670. ; fire was not pressed last frame...
  4671.  
  4672.  tst.b $65(a5)
  4673. ; if it has still not been pressed, go back above
  4674.  beq.s .firenownotpressed
  4675. ; fire was not pressed last time, and was this time, so has
  4676. ; been clicked.
  4677.  st PLR1_clicked
  4678.  st PLR1_fire
  4679.  
  4680. .doneplr1:
  4681.  
  4682.  move.l PLR1s_tyoff,d0
  4683.  move.l PLR1s_yoff,d1
  4684.  move.l PLR1s_yvel,d2
  4685.  sub.l d1,d0
  4686.  bgt.s .aboveground
  4687.  sub.l #512,d2
  4688.  blt.s .notfast
  4689.  move.l #0,d2
  4690. .notfast:
  4691.  add.l d2,d1
  4692.  sub.l d2,d0
  4693.  blt.s .pastitall
  4694.  move.l #0,d2
  4695.  add.l d0,d1
  4696.  bra.s .pastitall
  4697.  
  4698. .aboveground:
  4699.  add.l d2,d1
  4700.  add.l #1024,d2
  4701. .pastitall:
  4702.  
  4703.  move.l d2,PLR1s_yvel
  4704.  move.l d1,PLR1s_yoff
  4705.  
  4706.  rts
  4707.  
  4708. prot7: dc.w 0
  4709. OKTOPROCEED: dc.w 0
  4710.  
  4711. OtherInter:
  4712.  move.w #$0010,$dff000+intreq
  4713.  movem.l d0-d7/a0-a6,-(a7)
  4714.  bra doneshake
  4715.  
  4716.  rte
  4717.  
  4718.  
  4719. Chan0inter:
  4720.  
  4721.  move.w #$0010,$dff000+intreq
  4722.  
  4723.  tst.b doanything
  4724.  bne.s dosomething
  4725.  rte
  4726.  
  4727. dosomething:
  4728.  
  4729.  
  4730.  addq.w #1,FramesToDraw
  4731.  tst.b counting
  4732.  beq nostopcounter
  4733.  JSR STOPCOUNTNOADD
  4734. nostopcounter:
  4735.  movem.l d0-d7/a0-a6,-(a7)
  4736.  
  4737. ; tst.b OKTOPROCEED
  4738. ; bne.s justhandshake
  4739. ; jsr INITSEND
  4740. ; moveq #-1,d0
  4741. ; JSR SENDLAST
  4742. ; move.l #OtherInter,$6c 
  4743. ; st OKTOPROCEED
  4744. ; bra.s doneshake
  4745.  
  4746. ;justhandshake:
  4747. ; jsr INITSEND
  4748. ; moveq #0,d0
  4749. ; JSR SENDLAST
  4750. doneshake:
  4751.  
  4752.  cmp.b #'b',Prefsfile+3
  4753.  bne.s .noback
  4754.  jsr mt_music
  4755. .noback:
  4756.  
  4757.  bra dontshowtime
  4758.  
  4759.  tst.b oktodisplay
  4760.  beq dontshowtime
  4761.  clr.b oktodisplay
  4762.  subq.w #1,dispco
  4763.  bgt dontshowtime
  4764.  move.w #10,dispco
  4765.  
  4766.  move.l #TimerScr+10,a0
  4767.  move.l TimeCount,d0
  4768.  bge.s timenotneg
  4769.  move.l #1111*256,d0
  4770. timenotneg:
  4771.  asr.l #8,d0
  4772.  move.l #digits,a1
  4773.  move.w #7,d2
  4774. digitlop
  4775.  divs #10,d0
  4776.  swap d0
  4777.  lea (a1,d0.w*8),a2
  4778.  move.b (a2)+,(a0)
  4779.  move.b (a2)+,24(a0)
  4780.  move.b (a2)+,24*2(a0)
  4781.  move.b (a2)+,24*3(a0)
  4782.  move.b (a2)+,24*4(a0)
  4783.  move.b (a2)+,24*5(a0)
  4784.  move.b (a2)+,24*6(a0)
  4785.  move.b (a2)+,24*7(a0)
  4786.  subq #1,a0
  4787.  swap d0
  4788.  ext.l d0
  4789.  dbra d2,digitlop
  4790.  
  4791.  move.l #TimerScr+10+24*10,a0
  4792.  move.l NumTimes,d0
  4793.  move.l #digits,a1
  4794.  move.w #3,d2
  4795. digitlop2
  4796.  divs #10,d0
  4797.  swap d0
  4798.  lea (a1,d0.w*8),a2
  4799.  move.b (a2)+,(a0)
  4800.  move.b (a2)+,24(a0)
  4801.  move.b (a2)+,24*2(a0)
  4802.  move.b (a2)+,24*3(a0)
  4803.  move.b (a2)+,24*4(a0)
  4804.  move.b (a2)+,24*5(a0)
  4805.  move.b (a2)+,24*6(a0)
  4806.  move.b (a2)+,24*7(a0)
  4807.  subq #1,a0
  4808.  swap d0
  4809.  ext.l d0
  4810.  dbra d2,digitlop2
  4811.  
  4812.  move.l #TimerScr+10+24*20,a0
  4813.  moveq #0,d0
  4814.  move.w FramesToDraw,d0
  4815.  move.l #digits,a1
  4816.  move.w #2,d2
  4817. digitlop3
  4818.  divs #10,d0
  4819.  swap d0
  4820.  lea (a1,d0.w*8),a2
  4821.  move.b (a2)+,(a0)
  4822.  move.b (a2)+,24(a0)
  4823.  move.b (a2)+,24*2(a0)
  4824.  move.b (a2)+,24*3(a0)
  4825.  move.b (a2)+,24*4(a0)
  4826.  move.b (a2)+,24*5(a0)
  4827.  move.b (a2)+,24*6(a0)
  4828.  move.b (a2)+,24*7(a0)
  4829.  subq #1,a0
  4830.  swap d0
  4831.  ext.l d0
  4832.  dbra d2,digitlop3
  4833.  
  4834. dontshowtime:
  4835.  
  4836.  move.w Robotanimpos,d0
  4837.  add.w #6*38,d0
  4838.  cmp.w #6*38*64,d0
  4839.  blt.s norebot
  4840.  move.w #0,d0
  4841. norebot:
  4842.  move.w d0,Robotanimpos
  4843.  
  4844.  tst.w d0
  4845.  seq d1
  4846.  cmp.w #6*32*38,d0
  4847.  seq d2
  4848.  or.b d2,d1
  4849.  or.b d1,clump
  4850.  
  4851.  move.w Robotarmpos,d0
  4852.  add.w #6*14,d0
  4853.  cmp.w #6*14*64,d0
  4854.  blt.s norebot2
  4855.  move.w #0,d0
  4856. norebot2:
  4857.  move.w d0,Robotarmpos
  4858.  
  4859.  move.l alanptr,a0
  4860.  move.l (a0)+,alframe
  4861.  cmp.l #endalan,a0
  4862.  blt.s nostartalan
  4863.  move.l #alan,a0
  4864. nostartalan:
  4865.  move.l a0,alanptr
  4866.  
  4867.  move.l #$dff000,a6
  4868.  
  4869.  cmp.b #'4',Prefsfile+1
  4870.  bne.s nomuckabout
  4871.  
  4872.  move.w #$0,d0 
  4873.  tst.b NoiseMade0LEFT
  4874.  beq.s noturnoff0
  4875.  move.w #1,d0
  4876. noturnoff0:
  4877.  tst.b NoiseMade0RIGHT
  4878.  beq.s noturnoff1
  4879.  or.w #2,d0
  4880. noturnoff1:
  4881.  tst.b NoiseMade1RIGHT
  4882.  beq.s noturnoff2
  4883.  or.w #4,d0
  4884. noturnoff2:
  4885.  tst.b NoiseMade1LEFT
  4886.  beq.s noturnoff3
  4887.  or.w #8,d0
  4888. noturnoff3:
  4889.  move.w d0,dmacon(a6)
  4890.  
  4891. nomuckabout:
  4892.  
  4893.  tst.b PLR1MOUSE
  4894.  beq.s PLR1_nomouse
  4895.  bsr PLR1_mouse_control
  4896. PLR1_nomouse:
  4897.  tst.b PLR1KEYS
  4898.  beq.s PLR1_nokeys
  4899.  bsr PLR1_keyboard_control
  4900. PLR1_nokeys:
  4901. ; tst.b PLR1PATH
  4902. ; beq.s PLR1_nopath
  4903. ; bsr PLR1_follow_path
  4904. ;PLR1_nopath:
  4905.  tst.b PLR1JOY
  4906.  beq.s PLR1_nojoy
  4907.  bsr PLR1_JoyStick_control
  4908. PLR1_nojoy: 
  4909.  
  4910. ; tst.b PLR2_fire
  4911. ; beq.s firenotpressed2
  4912. ; fire was pressed last time.
  4913. ; btst #7,$bfe001
  4914. ; bne.s firenownotpressed2
  4915. ; fire is still pressed this time.
  4916. ; st PLR2_fire
  4917. ; bra dointer
  4918.  
  4919. firenownotpressed2:
  4920. ; fire has been released.
  4921. ; clr.b PLR2_fire
  4922. ; bra dointer
  4923.  
  4924. firenotpressed2
  4925.  
  4926. ; fire was not pressed last frame...
  4927.  
  4928. ; btst #7,$bfe001
  4929. ; if it has still not been pressed, go back above
  4930. ; bne.s firenownotpressed2
  4931. ; fire was not pressed last time, and was this time, so has
  4932. ; been clicked.
  4933. ; st PLR2_clicked
  4934. ; st PLR2_fire
  4935.  
  4936. dointer
  4937.  
  4938.  cmp.b #'4',Prefsfile+1
  4939.  beq fourchannel
  4940.  
  4941.  btst #1,$dff000+intreqr
  4942.  bne.s newsampbitl
  4943.  
  4944.  movem.l (a7)+,d0-d7/a0-a6
  4945.  tst.b counting
  4946.  beq .nostartcounter
  4947.  JSR STARTCOUNT
  4948. .nostartcounter:
  4949. noneed:
  4950.  
  4951.  rte
  4952.  
  4953.  
  4954. swappedem: dc.w 0
  4955.  
  4956. newsampbitl:
  4957.  
  4958.  move.w #$820f,$dff000+dmacon
  4959.  
  4960.  move.w #$200,$dff000+intreq
  4961.  
  4962. ; tst.b CHANNELDATA
  4963. ; bne nochannel0
  4964.  
  4965.  move.l pos0LEFT,a0
  4966.  move.l pos2LEFT,a1
  4967.  
  4968.  move.l #tab,a2
  4969.  
  4970.  moveq #0,d0
  4971.  moveq #0,d1
  4972.  move.b vol0left,d0
  4973.  move.b vol2left,d1
  4974.  cmp.b d1,d0
  4975.  slt swappedem
  4976.  bge.s fbig0
  4977.  
  4978. ; d1 is bigger so scale d0 and use d1
  4979. ; as audiochannel volume.
  4980.  
  4981.  exg a0,a1
  4982.  asl.w #6,d0
  4983.  divs d1,d0
  4984.  lsl.w #8,d0
  4985.  adda.w d0,a2
  4986.  move.w d1,$dff0a8
  4987.  bra.s donechan0
  4988.  
  4989. fbig0:
  4990.  tst.w d0
  4991.  beq.s donechan0
  4992.  asl.w #6,d1
  4993.  divs d0,d1
  4994.  lsl.w #8,d1
  4995.  adda.w d1,a2
  4996.  move.w d0,$dff0a8
  4997.  
  4998. donechan0:
  4999.  
  5000.  move.l Aupt0,a3
  5001.  move.l a3,$dff0a0
  5002.  move.l Auback0,Aupt0
  5003.  move.l a3,Auback0
  5004.  
  5005.  move.l Auback0,a3
  5006.  
  5007.  moveq #0,d0
  5008.  moveq #0,d1
  5009.  moveq #0,d2
  5010.  moveq #0,d3
  5011.  moveq #0,d4
  5012.  moveq #0,d5
  5013.  move.w #49,d7
  5014. loop:
  5015.  move.l (a0)+,d0
  5016.  move.b (a1)+,d1
  5017.  move.b (a1)+,d2
  5018.  move.b (a1)+,d3
  5019.  move.b (a1)+,d4
  5020.  move.b (a2,d3.w),d5
  5021.  swap d5
  5022.  move.b (a2,d1.w),d5
  5023.  asl.l #8,d5
  5024.  move.b (a2,d2.w),d5
  5025.  swap d5
  5026.  move.b (a2,d4.w),d5
  5027.  add.l d5,d0
  5028.  move.l d0,(a3)+
  5029.  dbra d7,loop
  5030.  
  5031.  tst.b swappedem
  5032.  beq.s .ok23
  5033.  exg a0,a1
  5034. .ok23:
  5035.  
  5036.  cmp.l Samp0endLEFT,a0
  5037.  blt.s .notoffendsamp1
  5038.  move.l #bass,a0
  5039.  move.l #bassend,Samp0endLEFT
  5040.  move.b #63,vol0left
  5041.  st LEFTCHANDATA+1
  5042.  move.w #0,LEFTCHANDATA+2
  5043. .notoffendsamp1:
  5044.  
  5045.  cmp.l Samp2endLEFT,a1
  5046.  blt.s .notoffendsamp2
  5047.  move.l #empty,a1
  5048.  move.l #emptyend,Samp2endLEFT
  5049.  move.b #0,vol2left
  5050.  st LEFTCHANDATA+1+8
  5051.  move.w #0,LEFTCHANDATA+2+8
  5052. .notoffendsamp2:
  5053.  
  5054.  move.l a0,pos0LEFT
  5055.  move.l a1,pos2LEFT
  5056.  
  5057. nochannel0:
  5058.  
  5059.  tst.b CHANNELDATA+16
  5060.  bne nochannel1
  5061.  
  5062.  
  5063.  move.l pos0RIGHT,a0
  5064.  move.l pos2RIGHT,a1
  5065.  
  5066.  move.l Aupt1,a3
  5067.  move.l a3,$dff0b0
  5068.  move.l Auback1,Aupt1
  5069.  move.l a3,Auback1
  5070.  
  5071.  move.l #tab,a2
  5072.  
  5073.  moveq #0,d0
  5074.  moveq #0,d1
  5075.  move.b vol0right,d0
  5076.  move.b vol2right,d1
  5077.  cmp.b d1,d0
  5078.  slt swappedem
  5079.  bge.s fbig1
  5080.  
  5081. ; d1 is bigger so scale d0 and use d1
  5082. ; as audiochannel volume.
  5083.  
  5084.  exg a0,a1
  5085.  asl.w #6,d0
  5086.  divs d1,d0
  5087.  lsl.w #8,d0
  5088.  adda.w d0,a2
  5089.  move.w d1,$dff0b8
  5090.  bra.s donechan1
  5091.  
  5092. fbig1:
  5093.  tst.w d0
  5094.  beq.s donechan1
  5095.  asl.w #6,d1
  5096.  divs d0,d1
  5097.  lsl.w #8,d1
  5098.  adda.w d1,a2
  5099.  move.w d0,$dff0b8
  5100.  
  5101. donechan1:
  5102.  moveq #0,d0
  5103.  moveq #0,d1
  5104.  moveq #0,d2
  5105.  moveq #0,d3
  5106.  moveq #0,d4
  5107.  moveq #0,d5
  5108.  move.w #49,d7
  5109. loop2:
  5110.  move.l (a0)+,d0
  5111.  move.b (a1)+,d1
  5112.  move.b (a1)+,d2
  5113.  move.b (a1)+,d3
  5114.  move.b (a1)+,d4
  5115.  move.b (a2,d3.w),d5
  5116.  swap d5
  5117.  move.b (a2,d1.w),d5
  5118.  asl.l #8,d5
  5119.  move.b (a2,d2.w),d5
  5120.  swap d5
  5121.  move.b (a2,d4.w),d5
  5122.  add.l d5,d0
  5123.  move.l d0,(a3)+
  5124.  dbra d7,loop2
  5125.  
  5126.  tst.b swappedem
  5127.  beq.s ok01
  5128.  exg a0,a1
  5129. ok01:
  5130.  
  5131.  cmp.l Samp0endRIGHT,a0
  5132.  blt.s .notoffendsamp1
  5133.  move.l #empty,a0
  5134.  move.l #emptyend,Samp0endRIGHT
  5135.  move.b #0,vol0right
  5136.  st RIGHTCHANDATA+1
  5137.  move.w #0,RIGHTCHANDATA+2
  5138. .notoffendsamp1:
  5139.  
  5140.  cmp.l Samp2endRIGHT,a1
  5141.  blt.s .notoffendsamp2
  5142.  move.l #empty,a1
  5143.  move.l #emptyend,Samp2endRIGHT
  5144.  move.b #0,vol2right
  5145.  st RIGHTCHANDATA+1+8
  5146.  move.w #0,RIGHTCHANDATA+2+8
  5147. .notoffendsamp2:
  5148.  
  5149.  move.l a0,pos0RIGHT
  5150.  move.l a1,pos2RIGHT
  5151.  
  5152. nochannel1:
  5153.  
  5154. ******************* Other two channels
  5155.  
  5156.  move.l pos1LEFT,a0
  5157.  move.l pos3LEFT,a1
  5158.  
  5159.  move.l #tab,a2
  5160.  
  5161.  moveq #0,d0
  5162.  moveq #0,d1
  5163.  move.b vol1left,d0
  5164.  move.b vol3left,d1
  5165.  cmp.b d1,d0
  5166.  slt swappedem
  5167.  bge.s fbig2
  5168.  
  5169. ; d1 is bigger so scale d0 and use d1
  5170. ; as audiochannel volume.
  5171.  
  5172.  exg a0,a1
  5173.  asl.w #6,d0
  5174.  divs d1,d0
  5175.  lsl.w #8,d0
  5176.  adda.w d0,a2
  5177.  move.w d1,$dff0d8
  5178.  bra.s donechan2
  5179.  
  5180. fbig2:
  5181.  tst.w d0
  5182.  beq.s donechan2
  5183.  asl.w #6,d1
  5184.  divs d0,d1
  5185.  lsl.w #8,d1
  5186.  adda.w d1,a2
  5187.  move.w d0,$dff0d8
  5188.  
  5189. donechan2:
  5190.  
  5191.  move.l Aupt2,a3
  5192.  move.l a3,$dff0d0
  5193.  move.l Auback2,Aupt2
  5194.  move.l a3,Auback2
  5195.  
  5196.  moveq #0,d0
  5197.  moveq #0,d1
  5198.  moveq #0,d2
  5199.  moveq #0,d3
  5200.  moveq #0,d4
  5201.  moveq #0,d5
  5202.  move.w #49,d7
  5203. loop3:
  5204.  move.l (a0)+,d0
  5205.  move.b (a1)+,d1
  5206.  move.b (a1)+,d2
  5207.  move.b (a1)+,d3
  5208.  move.b (a1)+,d4
  5209.  move.b (a2,d3.w),d5
  5210.  swap d5
  5211.  move.b (a2,d1.w),d5
  5212.  asl.l #8,d5
  5213.  move.b (a2,d2.w),d5
  5214.  swap d5
  5215.  move.b (a2,d4.w),d5
  5216.  add.l d5,d0
  5217.  move.l d0,(a3)+
  5218.  dbra d7,loop3
  5219.  
  5220.  tst.b swappedem
  5221.  beq.s .ok23
  5222.  exg a0,a1
  5223. .ok23:
  5224.  
  5225.  cmp.l Samp1endLEFT,a0
  5226.  blt.s .notoffendsamp3
  5227.  move.l #empty,a0
  5228.  move.l #emptyend,Samp1endLEFT
  5229.  move.b #0,vol1left
  5230.  st LEFTCHANDATA+1+4
  5231.  move.w #0,LEFTCHANDATA+2+4
  5232. .notoffendsamp3:
  5233.  
  5234.  cmp.l Samp3endLEFT,a1
  5235.  blt.s .notoffendsamp4
  5236.  move.l #empty,a1
  5237.  move.l #emptyend,Samp3endLEFT
  5238.  move.b #0,vol3left
  5239.  st LEFTCHANDATA+1+12
  5240.  move.w #0,LEFTCHANDATA+2+12
  5241. .notoffendsamp4:
  5242.  
  5243.  move.l a0,pos1LEFT
  5244.  move.l a1,pos3LEFT
  5245.  
  5246.  move.l pos1RIGHT,a0
  5247.  move.l pos3RIGHT,a1
  5248.  
  5249.  move.l Aupt3,a3
  5250.  move.l a3,$dff0c0
  5251.  move.l Auback3,Aupt3
  5252.  move.l a3,Auback3
  5253.  
  5254.  move.l #tab,a2
  5255.  
  5256.  moveq #0,d0
  5257.  moveq #0,d1
  5258.  move.b vol1right,d0
  5259.  move.b vol3right,d1
  5260.  cmp.b d1,d0
  5261.  slt.s swappedem
  5262.  bge.s fbig3
  5263.  
  5264.  exg a0,a1
  5265.  asl.w #6,d0
  5266.  divs d1,d0
  5267.  lsl.w #8,d0
  5268.  adda.w d0,a2
  5269.  move.w d1,$dff0c8
  5270.  bra.s donechan3
  5271.  
  5272. fbig3:
  5273.  tst.w d0
  5274.  beq.s donechan3
  5275.  asl.w #6,d1
  5276.  divs d0,d1
  5277.  lsl.w #8,d1
  5278.  adda.w d1,a2
  5279.  move.w d0,$dff0c8
  5280. donechan3:
  5281.  
  5282.  moveq #0,d0
  5283.  moveq #0,d1
  5284.  moveq #0,d2
  5285.  moveq #0,d3
  5286.  moveq #0,d4
  5287.  moveq #0,d5
  5288.  move.w #49,d7
  5289. loop4:
  5290.  move.l (a0)+,d0
  5291.  move.b (a1)+,d1
  5292.  move.b (a1)+,d2
  5293.  move.b (a1)+,d3
  5294.  move.b (a1)+,d4
  5295.  move.b (a2,d3.w),d5
  5296.  swap d5
  5297.  move.b (a2,d1.w),d5
  5298.  asl.l #8,d5
  5299.  move.b (a2,d2.w),d5
  5300.  swap d5
  5301.  move.b (a2,d4.w),d5
  5302.  add.l d5,d0
  5303.  move.l d0,(a3)+
  5304.  dbra d7,loop4
  5305.  
  5306.  tst.b swappedem
  5307.  beq.s .ok23
  5308.  exg a0,a1
  5309. .ok23:
  5310.  
  5311.  cmp.l Samp1endRIGHT,a0
  5312.  blt.s notoffendsamp3
  5313.  move.l #empty,a0
  5314.  move.l #emptyend,Samp1endRIGHT
  5315.  move.b #0,vol1right
  5316.  st RIGHTCHANDATA+1+4
  5317.  move.w #0,RIGHTCHANDATA+2+4
  5318. notoffendsamp3:
  5319.  
  5320.  cmp.l Samp3endRIGHT,a1
  5321.  blt.s notoffendsamp4
  5322.  move.l #empty,a1
  5323.  move.l #emptyend,Samp3endRIGHT
  5324.  move.b #0,vol3right
  5325.  st RIGHTCHANDATA+1+12
  5326.  move.w #0,RIGHTCHANDATA+2+12
  5327. notoffendsamp4:
  5328.  
  5329.  move.l a0,pos1RIGHT
  5330.  move.l a1,pos3RIGHT
  5331.  
  5332.  movem.l (a7)+,d0-d7/a0-a6
  5333.  tst.b counting
  5334.  beq .nostartcounter
  5335.  JSR STARTCOUNT
  5336. .nostartcounter:
  5337.  
  5338.  rte
  5339.  
  5340. ***********************************
  5341. * 4 channel sound routine
  5342. ***********************************
  5343.  
  5344. fourchannel:
  5345.  
  5346.  move.l #$dff000,a6
  5347.  
  5348.  btst #7,intreqrl(a6)
  5349.  beq.s nofinish0
  5350.  move.w #0,LEFTCHANDATA+2
  5351.  st LEFTCHANDATA+1
  5352.  move.l #bass,$a0(a6)
  5353.  move.w #18370/2,$a4(a6) 
  5354.  move.w #$0080,intreq(a6)
  5355. nofinish0:
  5356.  
  5357.  tst.b NoiseMade0pLEFT
  5358.  beq.s NoChan0sound
  5359.  
  5360.  move.l Samp0endLEFT,d0
  5361.  move.l pos0LEFT,d1
  5362.  sub.l d1,d0
  5363.  asr.w #1,d0
  5364.  move.w d0,$a4(a6)
  5365.  move.l d1,$a0(a6)
  5366.  move.w #$8201,dmacon(a6)
  5367.  moveq #0,d0
  5368.  move.b vol0left,d0
  5369.  move.w d0,$a8(a6)
  5370.  
  5371. NoChan0sound:
  5372.  
  5373.  btst #0,intreqr(a6)
  5374.  beq.s nofinish1
  5375.  move.w #0,RIGHTCHANDATA+2
  5376.  st RIGHTCHANDATA+1
  5377.  move.l #null,$b0(a6)
  5378.  move.w #100,$b4(a6)
  5379.  move.w #$0100,intreq(a6)
  5380. nofinish1:
  5381.  
  5382.  tst.b NoiseMade0pRIGHT
  5383.  beq.s NoChan1sound
  5384.  
  5385.  move.l Samp0endRIGHT,d0
  5386.  move.l pos0RIGHT,d1
  5387.  sub.l d1,d0
  5388.  asr.w #1,d0
  5389.  move.w d0,$b4(a6)
  5390.  move.l d1,$b0(a6)
  5391.  move.w #$8202,dmacon(a6)
  5392.  moveq #0,d0
  5393.  move.b vol0right,d0
  5394.  move.w d0,$b8(a6)
  5395.  
  5396. NoChan1sound:
  5397.  
  5398.  
  5399.  btst #1,intreqr(a6)
  5400.  beq.s nofinish2
  5401.  move.w #0,RIGHTCHANDATA+2+4
  5402.  st RIGHTCHANDATA+1+4
  5403.  move.l #null,$c0(a6)
  5404.  move.w #100,$c4(a6)
  5405.  move.w #$0200,intreq(a6)
  5406. nofinish2:
  5407.  
  5408.  tst.b NoiseMade1pRIGHT
  5409.  beq.s NoChan2sound
  5410.  
  5411.  move.l Samp1endRIGHT,d0
  5412.  move.l pos1RIGHT,d1
  5413.  sub.l d1,d0
  5414.  asr.w #1,d0
  5415.  move.w d0,$c4(a6)
  5416.  move.l d1,$c0(a6)
  5417.  move.w #$8204,dmacon(a6)
  5418.  moveq #0,d0
  5419.  move.b vol1right,d0
  5420.  move.w d0,$c8(a6)
  5421.  
  5422. NoChan2sound:
  5423.  
  5424.  btst #2,intreqr(a6)
  5425.  beq.s nofinish3
  5426.  move.w #0,LEFTCHANDATA+2+4
  5427.  st LEFTCHANDATA+1+4
  5428.  move.l #null,$d0(a6)
  5429.  move.w #100,$d4(a6)
  5430.  move.w #$0400,intreq(a6)
  5431. nofinish3:
  5432.  
  5433.  tst.b NoiseMade1pLEFT
  5434.  beq.s NoChan3sound
  5435.  
  5436.  move.l Samp1endLEFT,d0
  5437.  move.l pos1LEFT,d1
  5438.  sub.l d1,d0
  5439.  asr.w #1,d0
  5440.  move.w d0,$d4(a6)
  5441.  move.l d1,$d0(a6)
  5442.  move.w #$8208,dmacon(a6)
  5443.  moveq #0,d0
  5444.  move.b vol1left,d0
  5445.  move.w d0,$d8(a6)
  5446.  
  5447. NoChan3sound:
  5448.  
  5449. nomorechannels:
  5450.  
  5451.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  5452.  move.l #0,NoiseMade0LEFT
  5453.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  5454.  move.l #0,NoiseMade0RIGHT
  5455.  
  5456.  movem.l (a7)+,d0-d7/a0-a6
  5457.  tst.b counting
  5458.  beq .nostartcounter
  5459.  JSR STARTCOUNT
  5460. .nostartcounter:
  5461.  
  5462.  rte
  5463.  
  5464. backbeat: dc.w 0
  5465.  
  5466. Samp0endRIGHT: dc.l emptyend
  5467. Samp1endRIGHT: dc.l emptyend
  5468. Samp2endRIGHT: dc.l emptyend
  5469. Samp3endRIGHT: dc.l emptyend
  5470. Samp0endLEFT: dc.l emptyend
  5471. Samp1endLEFT: dc.l emptyend
  5472. Samp2endLEFT: dc.l emptyend
  5473. Samp3endLEFT: dc.l emptyend
  5474.  
  5475. Aupt0: dc.l null
  5476. Auback0: dc.l null+500
  5477. Aupt2: dc.l null3
  5478. Auback2: dc.l null3+500
  5479. Aupt3: dc.l null4
  5480. Auback3: dc.l null4+500
  5481. Aupt1: dc.l null2
  5482. Auback1: dc.l null2+500
  5483.  
  5484. NoiseMade0LEFT: dc.b 0
  5485. NoiseMade1LEFT: dc.b 0
  5486. NoiseMade2LEFT: dc.b 0
  5487. NoiseMade3LEFT: dc.b 0
  5488. NoiseMade0pLEFT: dc.b 0
  5489. NoiseMade1pLEFT: dc.b 0
  5490. NoiseMade2pLEFT: dc.b 0
  5491. NoiseMade3pLEFT: dc.b 0
  5492. NoiseMade0RIGHT: dc.b 0
  5493. NoiseMade1RIGHT: dc.b 0
  5494. NoiseMade2RIGHT: dc.b 0
  5495. NoiseMade3RIGHT: dc.b 0
  5496. NoiseMade0pRIGHT: dc.b 0
  5497. NoiseMade1pRIGHT: dc.b 0
  5498. NoiseMade2pRIGHT: dc.b 0
  5499. NoiseMade3pRIGHT: dc.b 0
  5500.  
  5501. empty: ds.l 100
  5502. emptyend:
  5503.  
  5504. **************************************
  5505. * I want a routine to calculate all the
  5506. * info needed for the sound player to
  5507. * work, given say position of noise, volume
  5508. * and sample number.
  5509.  
  5510. Samplenum: dc.w 0
  5511. Noisex: dc.w 0
  5512. Noisez: dc.w 0
  5513. Noisevol: dc.w 0
  5514. chanpick: dc.w 0
  5515. IDNUM: dc.w 0
  5516. needleft: dc.b 0
  5517. needright: dc.b 0
  5518. STEREO: dc.b $0
  5519. even
  5520. prot6: dc.w 0
  5521.  
  5522.  even
  5523.  
  5524. CHANNELDATA:
  5525. LEFTCHANDATA:
  5526.  dc.l $FF000000
  5527.  dc.l $00000000
  5528.  dc.l $00000000
  5529.  dc.l $00000000
  5530. RIGHTCHANDATA:
  5531.  dc.l $00000000
  5532.  dc.l $00000000
  5533.  dc.l $00000000
  5534.  dc.l $00000000
  5535.  
  5536. RIGHTPLAYEDTAB: ds.l 20
  5537. LEFTPLAYEDTAB: ds.l 20
  5538.  
  5539. MakeSomeNoise:
  5540.  
  5541. ; Plan for new sound handler:
  5542. ; It is sent a sample number,
  5543. ; a position relative to the
  5544. ; player, an id number and a volume.
  5545. ; Also notifplaying.
  5546.  
  5547. ; indirect inputs are the available
  5548. ; channel flags and whether or not
  5549. ; stereo sound is selected.
  5550.  
  5551. ; the algorithm must decide
  5552. ; whether the new sound is more
  5553. ; important than the ones already
  5554. ; playing. Thus an 'importance'
  5555. ; must be calculated, probably
  5556. ; using volume.
  5557.  
  5558. ; The output needs to be:
  5559.  
  5560. ; Write the pointers and volumes of
  5561. ; the sound channels
  5562.  
  5563.  
  5564.  tst.b notifplaying
  5565.  beq.s dontworry
  5566.  
  5567. ; find if we are already playing
  5568.  
  5569.  move.b IDNUM,d0
  5570.  move.w #7,d1
  5571.  lea CHANNELDATA,a3
  5572. findsameasme
  5573.  tst.b (a3)
  5574.  bne.s notavail
  5575.  cmp.b 1(a3),d0
  5576.  beq SameAsMe
  5577. notavail:
  5578.  add.w #4,a3
  5579.  dbra d1,findsameasme
  5580.  bra dontworry
  5581. SameAsMe
  5582.  rts
  5583.  
  5584. dontworry:
  5585.  
  5586. ; Ok its fine for us to play a sound.
  5587. ; So calculate left/right volume.
  5588.  
  5589.  move.w Noisex,d1
  5590.  muls d1,d1
  5591.  move.w Noisez,d2
  5592.  muls d2,d2
  5593.  move.w #64,d3
  5594.  moveq #1,d0
  5595.  add.l d1,d2
  5596.  beq pastcalc
  5597.  
  5598.  move.w #31,d0
  5599. .findhigh
  5600.  btst d0,d2
  5601.  bne .foundhigh
  5602.  dbra d0,.findhigh
  5603. .foundhigh
  5604.  asr.w #1,d0
  5605.  clr.l d3
  5606.  bset d0,d3
  5607.  move.l d3,d0
  5608.  
  5609.  move.w d0,d3
  5610.  muls d3,d3    ; x*x
  5611.  sub.l d2,d3    ; x*x-a
  5612.  asr.l #1,d3    ; (x*x-a)/2
  5613.  divs d0,d3    ; (x*x-a)/2x
  5614.  sub.w d3,d0    ; second approx
  5615.  bgt .stillnot0
  5616.  move.w #1,d0
  5617. .stillnot0
  5618.  
  5619.  move.w d0,d3
  5620.  muls d3,d3
  5621.  sub.l d2,d3
  5622.  asr.l #1,d3
  5623.  divs d0,d3
  5624.  sub.w d3,d0    ; second approx
  5625.  bgt .stillnot02
  5626.  move.w #1,d0
  5627. .stillnot02
  5628.  
  5629.  move.w #64,d3
  5630.  muls Noisevol,d3
  5631.  asr.w #1,d0
  5632.  addq #1,d0
  5633.  divs d0,d3
  5634.  
  5635.  cmp.w #64,d3
  5636.  ble.s notooloud
  5637.  move.w #64,d3
  5638. notooloud:
  5639.  
  5640. pastcalc:
  5641.  
  5642.     ; d3 contains volume of noise.
  5643.     
  5644.  move.w d3,d4
  5645.  
  5646.  move.w d3,d2
  5647.  muls Noisex,d2
  5648.  add.w d0,d0
  5649.  divs d0,d2
  5650.  
  5651.  bgt.s quietleft
  5652.  add.w d2,d4
  5653.  bge.s donequiet
  5654.  move.w #0,d4
  5655.  bra.s donequiet
  5656. quietleft:
  5657.  sub.w d2,d3
  5658.  bge.s donequiet
  5659.  move.w #0,d3
  5660. donequiet:
  5661.  
  5662. ; d3=leftvol?
  5663. ; d4=rightvol?
  5664.  
  5665.  clr.w needleft
  5666.  
  5667.  cmp.b d3,d4
  5668.  bgt.s RightLouder
  5669.  
  5670. ; Left is louder; is it MUCH louder?
  5671.  
  5672.  st needleft
  5673.  move.w d3,d2
  5674.  sub.w d4,d2
  5675.  cmp.w #32,d2
  5676.  slt needright
  5677.  bra aboutsame
  5678.  
  5679. RightLouder:
  5680.  st needright
  5681.  move.w d4,d2
  5682.  sub.w d3,d2
  5683.  cmp.w #32,d2
  5684.  slt needleft
  5685.  
  5686. aboutsame:
  5687.  
  5688.  tst.b STEREO
  5689.  beq NOSTEREO
  5690.  
  5691. ; Find least important sound on left
  5692.  
  5693.  move.l #0,a2
  5694.  move.l #0,d5
  5695.  move.w #10000,d2
  5696.  move.b IDNUM,d0
  5697.  lea LEFTCHANDATA,a3
  5698.  move.w #3,d1
  5699. FindLeftChannel
  5700.  tst.b (a3)
  5701.  bne.s .notactive
  5702.  cmp.b 1(a3),d0
  5703.  beq.s FOUNDLEFT
  5704.  cmp.w 2(a3),d2
  5705.  blt.s .notactive
  5706.  move.w 2(a3),d2
  5707.  move.l a3,a2
  5708.  move.w d5,d6
  5709.  
  5710. .notactive:
  5711.  add.w #4,a3
  5712.  add.w #1,d5
  5713.  dbra d1,FindLeftChannel
  5714.  move.l a2,a3
  5715.  bra.s gopastleft
  5716. FOUNDLEFT:
  5717.  move.w d5,d6
  5718. gopastleft:
  5719.  tst.l a3
  5720.  bne.s FOUNDALEFT
  5721.  rts
  5722. FOUNDALEFT:
  5723.  
  5724. ; d6 = channel number
  5725.  move.b d0,1(a3)
  5726.  move.w d3,2(a3)
  5727.  
  5728.  move.w Samplenum,d5
  5729.  move.l #SampleList,a3
  5730.  move.l (a3,d5.w*8),a1
  5731.  move.l 4(a3,d5.w*8),a2
  5732.  
  5733.  tst.b d6
  5734.  seq NoiseMade0LEFT
  5735.  beq.s .chan0
  5736.  cmp.b #2,d6
  5737.  slt NoiseMade1LEFT
  5738.  blt .chan1
  5739.  seq NoiseMade2LEFT
  5740.  beq .chan2
  5741.  st NoiseMade3LEFT
  5742.  
  5743.  move.b d5,LEFTPLAYEDTAB+9
  5744.  move.b d3,LEFTPLAYEDTAB+1+9
  5745.  move.b d4,LEFTPLAYEDTAB+2+9
  5746.  move.b d3,vol3left
  5747.  move.l a1,pos3LEFT
  5748.  move.l a2,Samp3endLEFT
  5749.  bra dorightchan
  5750.  
  5751. .chan0: 
  5752.  move.b d5,LEFTPLAYEDTAB
  5753.  move.b d3,LEFTPLAYEDTAB+1
  5754.  move.b d4,LEFTPLAYEDTAB+2
  5755.  move.l a1,pos0LEFT
  5756.  move.l a2,Samp0endLEFT
  5757.  move.b d3,vol0left
  5758.  bra dorightchan
  5759.  
  5760. .chan1:
  5761.  move.b d5,LEFTPLAYEDTAB+3
  5762.  move.b d3,LEFTPLAYEDTAB+1+3
  5763.  move.b d4,LEFTPLAYEDTAB+2+3
  5764.  move.b d3,vol1left
  5765.  move.l a1,pos1LEFT
  5766.  move.l a2,Samp1endLEFT
  5767.  bra dorightchan
  5768.  
  5769. .chan2: 
  5770.  move.b d5,LEFTPLAYEDTAB+6
  5771.  move.b d3,LEFTPLAYEDTAB+1+6
  5772.  move.b d4,LEFTPLAYEDTAB+2+6
  5773.  move.l a1,pos2LEFT
  5774.  move.l a2,Samp2endLEFT
  5775.  move.b d3,vol2left
  5776.  
  5777. dorightchan:
  5778.  
  5779. ; Find least important sound on right
  5780.  
  5781.  move.l #0,a2
  5782.  move.l #0,d5
  5783.  move.w #10000,d2
  5784.  move.b IDNUM,d0
  5785.  lea RIGHTCHANDATA,a3
  5786.  move.w #3,d1
  5787. FindRightChannel
  5788.  tst.b (a3)
  5789.  bne.s .notactive
  5790.  cmp.b 1(a3),d0
  5791.  beq.s FOUNDRIGHT
  5792.  cmp.w 2(a3),d2
  5793.  blt.s .notactive
  5794.  move.w 2(a3),d2
  5795.  move.l a3,a2
  5796.  move.w d5,d6
  5797.  
  5798. .notactive:
  5799.  add.w #4,a3
  5800.  add.w #1,d5
  5801.  dbra d1,FindRightChannel
  5802.  move.l a2,a3
  5803.  bra.s gopastright
  5804. FOUNDRIGHT:
  5805.  move.w d5,d6
  5806. gopastright:
  5807.  tst.l a3
  5808.  bne.s FOUNDARIGHT
  5809.  rts
  5810. FOUNDARIGHT:
  5811.  
  5812. ; d6 = channel number
  5813.  move.b d0,1(a3)
  5814.  move.w d3,2(a3)
  5815.  
  5816.  move.w Samplenum,d5
  5817.  move.l #SampleList,a3
  5818.  move.l (a3,d5.w*8),a1
  5819.  move.l 4(a3,d5.w*8),a2
  5820.  
  5821.  tst.b d6
  5822.  seq NoiseMade0RIGHT
  5823.  beq.s .chan0
  5824.  cmp.b #2,d6
  5825.  slt NoiseMade1RIGHT
  5826.  blt .chan1
  5827.  seq NoiseMade2RIGHT
  5828.  beq .chan2
  5829.  st NoiseMade3RIGHT
  5830.  
  5831.  move.b d5,RIGHTPLAYEDTAB+9
  5832.  move.b d3,RIGHTPLAYEDTAB+1+9
  5833.  move.b d4,RIGHTPLAYEDTAB+2+9
  5834.  move.b d4,vol3right
  5835.  move.l a1,pos3RIGHT
  5836.  move.l a2,Samp3endRIGHT
  5837.  rts
  5838.  
  5839. .chan0: 
  5840.  move.b d5,RIGHTPLAYEDTAB
  5841.  move.b d3,RIGHTPLAYEDTAB+1
  5842.  move.b d4,RIGHTPLAYEDTAB+2
  5843.  move.l a1,pos0RIGHT
  5844.  move.l a2,Samp0endRIGHT
  5845.  move.b d4,vol0right
  5846.  rts
  5847.  
  5848. .chan1:
  5849.  move.b d5,RIGHTPLAYEDTAB+3
  5850.  move.b d3,RIGHTPLAYEDTAB+1+3
  5851.  move.b d4,RIGHTPLAYEDTAB+2+3
  5852.  move.b d3,vol1right
  5853.  move.l a1,pos1RIGHT
  5854.  move.l a2,Samp1endRIGHT
  5855.  rts
  5856.  
  5857. .chan2: 
  5858.  move.b d5,RIGHTPLAYEDTAB+6
  5859.  move.b d3,RIGHTPLAYEDTAB+1+6
  5860.  move.b d4,RIGHTPLAYEDTAB+2+6
  5861.  move.l a1,pos2RIGHT
  5862.  move.l a2,Samp2endRIGHT
  5863.  move.b d3,vol2right
  5864.  rts
  5865.  
  5866. NOSTEREO:
  5867.  move.l #0,a2
  5868.  move.l #0,d5
  5869.  move.w #10000,d2
  5870.  move.b IDNUM,d0
  5871.  lea CHANNELDATA,a3
  5872.  move.w #7,d1
  5873. FindChannel
  5874.  tst.b (a3)
  5875.  bne.s .notactive
  5876.  cmp.b 1(a3),d0
  5877.  beq.s FOUNDCHAN
  5878.  cmp.w 2(a3),d2
  5879.  blt.s .notactive
  5880.  move.w 2(a3),d2
  5881.  move.l a3,a2
  5882.  move.w d5,d6
  5883.  
  5884. .notactive:
  5885.  add.w #4,a3
  5886.  add.w #1,d5
  5887.  dbra d1,FindChannel
  5888.  move.l a2,a3
  5889.  bra.s gopastchan
  5890. FOUNDCHAN:
  5891.  move.w d5,d6
  5892. gopastchan:
  5893.  tst.l a3
  5894.  bne.s FOUNDACHAN
  5895. tooquiet:
  5896.  rts
  5897. FOUNDACHAN:
  5898.  
  5899. ; d6 = channel number
  5900.  
  5901.  cmp.w d2,d3
  5902.  blt.s tooquiet
  5903.  
  5904.  move.b d0,1(a3)
  5905.  move.w d3,2(a3)
  5906.  
  5907.  move.w Samplenum,d5
  5908.  move.l #SampleList,a3
  5909.  move.l (a3,d5.w*8),a1
  5910.  move.l 4(a3,d5.w*8),a2
  5911.  
  5912.  tst.b d6
  5913.  seq NoiseMade0LEFT
  5914.  beq .chan0
  5915.  cmp.b #2,d6
  5916.  slt NoiseMade1LEFT
  5917.  blt .chan1
  5918.  seq NoiseMade2LEFT
  5919.  beq .chan2
  5920.  cmp.b #4,d6
  5921.  slt NoiseMade3LEFT
  5922.  blt .chan3
  5923.  seq NoiseMade0RIGHT
  5924.  beq .chan4
  5925.  cmp.b #6,d6
  5926.  slt NoiseMade1RIGHT
  5927.  blt .chan5
  5928.  seq NoiseMade2RIGHT
  5929.  beq .chan6
  5930.  st NoiseMade3RIGHT
  5931.  
  5932.  move.b d5,RIGHTPLAYEDTAB+9
  5933.  move.b d3,RIGHTPLAYEDTAB+1+9
  5934.  move.b d4,RIGHTPLAYEDTAB+2+9
  5935.  move.b d4,vol3right
  5936.  move.l a1,pos3RIGHT
  5937.  move.l a2,Samp3endRIGHT
  5938.  rts
  5939.  
  5940. .chan3:
  5941.  move.b d5,LEFTPLAYEDTAB+9
  5942.  move.b d3,LEFTPLAYEDTAB+1+9
  5943.  move.b d4,LEFTPLAYEDTAB+2+9
  5944.  move.b d3,vol3left
  5945.  move.l a1,pos3LEFT
  5946.  move.l a2,Samp3endLEFT
  5947.  bra dorightchan
  5948.  
  5949. .chan0: 
  5950.  move.b d5,LEFTPLAYEDTAB
  5951.  move.b d3,LEFTPLAYEDTAB+1
  5952.  move.b d4,LEFTPLAYEDTAB+2
  5953.  move.l a1,pos0LEFT
  5954.  move.l a2,Samp0endLEFT
  5955.  move.b d3,vol0left
  5956.  rts
  5957.  
  5958. .chan1:
  5959.  move.b d5,LEFTPLAYEDTAB+3
  5960.  move.b d3,LEFTPLAYEDTAB+1+3
  5961.  move.b d4,LEFTPLAYEDTAB+2+3
  5962.  move.b d3,vol1left
  5963.  move.l a1,pos1LEFT
  5964.  move.l a2,Samp1endLEFT
  5965.  rts
  5966.  
  5967. .chan2: 
  5968.  move.b d5,LEFTPLAYEDTAB+6
  5969.  move.b d3,LEFTPLAYEDTAB+1+6
  5970.  move.b d4,LEFTPLAYEDTAB+2+6
  5971.  move.l a1,pos2LEFT
  5972.  move.l a2,Samp2endLEFT
  5973.  move.b d3,vol2left
  5974.  rts
  5975.  
  5976. .chan4: 
  5977.  move.b d5,RIGHTPLAYEDTAB
  5978.  move.b d3,RIGHTPLAYEDTAB+1
  5979.  move.b d4,RIGHTPLAYEDTAB+2
  5980.  move.l a1,pos0RIGHT
  5981.  move.l a2,Samp0endRIGHT
  5982.  move.b d4,vol0right
  5983.  rts
  5984.  
  5985. .chan5:
  5986.  move.b d5,RIGHTPLAYEDTAB+3
  5987.  move.b d3,RIGHTPLAYEDTAB+1+3
  5988.  move.b d4,RIGHTPLAYEDTAB+2+3
  5989.  move.b d3,vol1right
  5990.  move.l a1,pos1RIGHT
  5991.  move.l a2,Samp1endRIGHT
  5992.  rts
  5993.  
  5994. .chan6: 
  5995.  move.b d5,RIGHTPLAYEDTAB+6
  5996.  move.b d3,RIGHTPLAYEDTAB+1+6
  5997.  move.b d4,RIGHTPLAYEDTAB+2+6
  5998.  move.l a1,pos2RIGHT
  5999.  move.l a2,Samp2endRIGHT
  6000.  move.b d3,vol2right
  6001.  rts
  6002.  
  6003. SampleList:
  6004.  dc.l Scream,EndScream
  6005.  dc.l Shoot,EndShoot
  6006.  dc.l Munch,EndMunch
  6007.  dc.l PooGun,EndPooGun
  6008.  dc.l Collect,EndCollect
  6009. ;5
  6010.  dc.l DoorNoise,EndDoorNoise
  6011.  dc.l 0,0
  6012.  dc.l Stomp,EndStomp
  6013.  dc.l LowScream,EndLowScream
  6014.  dc.l BaddieGun,EndBaddieGun
  6015. ;10
  6016.  dc.l SwitchNoise,EndSwitch
  6017.  dc.l Reload,EndReload
  6018.  dc.l NoAmmo,EndNoAmmo
  6019.  dc.l Splotch,EndSplotch
  6020.  dc.l SplatPop,EndSplatPop
  6021. ;15
  6022.  dc.l Boom,EndBoom
  6023.  dc.l Hiss,EndHiss
  6024.  dc.l Howl1,EndHowl1
  6025.  dc.l Howl2,EndHowl2
  6026.  dc.l Pant,EndPant
  6027. ;20
  6028.  dc.l Whoosh,EndWhoosh
  6029.  
  6030. saveinters:  
  6031.  dc.w 0
  6032.  
  6033. z: dc.w 10
  6034.  
  6035. notifplaying:
  6036.  dc.w 0
  6037.  
  6038. audpos1: dc.w 0
  6039. audpos1b: dc.w 0
  6040. audpos2: dc.w 0
  6041. audpos2b: dc.w 0
  6042. audpos3: dc.w 0
  6043. audpos3b: dc.w 0
  6044. audpos4: dc.w 0
  6045. audpos4b: dc.w 0
  6046.  
  6047. vol0left: dc.w 0
  6048. vol0right: dc.w 0
  6049. vol1left: dc.w 0
  6050. vol1right: dc.w 0
  6051. vol2left: dc.w 0
  6052. vol2right: dc.w 0
  6053. vol3left: dc.w 0
  6054. vol3right: dc.w 0
  6055.  
  6056. pos: dc.l 0
  6057.  
  6058. pos0LEFT: dc.l empty
  6059. pos1LEFT: dc.l empty
  6060. pos2LEFT: dc.l empty
  6061. pos3LEFT: dc.l empty
  6062. pos0RIGHT: dc.l empty
  6063. pos1RIGHT: dc.l empty
  6064. pos2RIGHT: dc.l empty
  6065. pos3RIGHT: dc.l empty
  6066.  
  6067. numtodo dc.w 0
  6068.  
  6069. npt: dc.w 0
  6070.  
  6071. pretab:
  6072. val SET 0
  6073.  REPT 128
  6074.  dc.b val
  6075. val SET val+1
  6076.  ENDR
  6077. val SET -128
  6078.  REPT 128
  6079.  dc.b val
  6080. val SET val+1
  6081.  ENDR 
  6082.  
  6083. tab:
  6084.  ds.b 256*65
  6085.  
  6086.  
  6087. test: dc.l 0
  6088.  ds.l 30
  6089.  
  6090.  even
  6091. ConstCols:
  6092.  incbin "ConstCols"
  6093.  even
  6094. Smoothscalecols:
  6095. ; incbin "smoothbumppalscaled"
  6096.  even
  6097. SmoothTile:
  6098. ; incbin "smoothbumptile"
  6099.  even
  6100. Bumpscalecols:
  6101. ; incbin "Bumppalscaled"
  6102.  even
  6103. Bumptile:
  6104. ; incbin "bumptile"
  6105.  even
  6106. scalecols: incbin "bytepixpalscaled"
  6107.  even
  6108. floorscalecols: incbin "floorpalscaled"
  6109.  even
  6110. PaletteAddr: dc.l 0
  6111. ChunkAddr: dc.l 0
  6112. walltiles:
  6113.  dc.l GreenMechanicWALL
  6114.  dc.l BlueGreyMetalWALL
  6115.  dc.l TechnoDetailWALL
  6116.  dc.l BlueStoneWALL
  6117.  dc.l RedAlertWALL
  6118.  dc.l RockWALL
  6119.  
  6120. GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  6121. BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  6122. TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  6123. BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  6124. RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  6125. RockWALL: incbin "ab3:includes/walls/rock.wad"
  6126.  
  6127. floortile:
  6128.  incbin "floortile" 
  6129.  even
  6130. wallrouts:
  6131. ; incbin "2x2WallDraw" 
  6132.  CNOP 0,64
  6133. BackPicture:
  6134.  incbin "backfile"
  6135. EndBackPicture:
  6136.  
  6137. drawpt: dc.l colbars2
  6138. olddrawpt: dc.l colbars
  6139. frompt: dc.l 0 
  6140.  
  6141. SineTable:
  6142.  incbin "bigsine"
  6143.  
  6144. angpos: dc.w 0
  6145. angspd: dc.w 0
  6146. flooryoff: dc.w 0
  6147. xoff: dc.l 0
  6148. yoff: dc.l 0
  6149. yvel: dc.l 0
  6150. zoff: dc.l 0
  6151. tyoff: dc.l 0
  6152. xspdval: dc.l 0
  6153. zspdval: dc.l 0
  6154. Zone: dc.w 0
  6155.  
  6156. PLR1: dc.b $ff
  6157.  even
  6158. PLR1_cosval: dc.w 0
  6159. PLR1_sinval: dc.w 0
  6160. PLR1_angpos: dc.w 0
  6161. PLR1_angspd: dc.w 0
  6162. PLR1_xoff: dc.l 0
  6163. PLR1_yoff: dc.l 0
  6164. PLR1_yvel: dc.l 0
  6165. PLR1_zoff: dc.l 0
  6166. PLR1_tyoff: dc.l 0
  6167. PLR1_xspdval: dc.l 0
  6168. PLR1_zspdval: dc.l 0
  6169. PLR1_Zone: dc.w 0
  6170. PLR1_Roompt: dc.l 0
  6171. PLR1_OldRoompt: dc.l 0
  6172. PLR1_PointsToRotatePtr: dc.l 0
  6173. PLR1_ListOfGraphRooms: dc.l 0
  6174. PLR1_oldxoff: dc.l 0
  6175. PLR1_oldzoff: dc.l 0
  6176. PLR1_StoodInTop: dc.b 0
  6177.  even
  6178. PLR1_height: dc.l 0
  6179.  
  6180.  ds.w 4
  6181.  
  6182. PLR1s_cosval: dc.w 0
  6183. PLR1s_sinval: dc.w 0
  6184. PLR1s_angpos: dc.w 0
  6185. PLR1s_angspd: dc.w 0
  6186. PLR1s_xoff: dc.l 0
  6187. PLR1s_yoff: dc.l 0
  6188. PLR1s_yvel: dc.l 0
  6189. PLR1s_zoff: dc.l 0
  6190. PLR1s_tyoff: dc.l 0
  6191. PLR1s_xspdval: dc.l 0
  6192. PLR1s_zspdval: dc.l 0
  6193. PLR1s_Zone: dc.w 0
  6194. PLR1s_Roompt: dc.l 0
  6195. PLR1s_OldRoompt: dc.l 0
  6196. PLR1s_PointsToRotatePtr: dc.l 0
  6197. PLR1s_ListOfGraphRooms: dc.l 0
  6198. PLR1s_oldxoff: dc.l 0
  6199. PLR1s_oldzoff: dc.l 0
  6200. PLR1s_height: dc.l 0
  6201. PLR1s_targheight: dc.l 0
  6202.  
  6203.  ds.w 4
  6204.  
  6205. PLR2: dc.b $0
  6206.  even
  6207. PLR2_cosval: dc.w 0
  6208. PLR2_sinval: dc.w 0
  6209. PLR2_angpos: dc.w 0
  6210. PLR2_angspd: dc.w 0
  6211. PLR2_xoff: dc.l 0
  6212. PLR2_yoff: dc.l 0
  6213. PLR2_yvel: dc.l 0
  6214. PLR2_zoff: dc.l 0
  6215. PLR2_tyoff: dc.l 0
  6216. PLR2_xspdval: dc.l 0
  6217. PLR2_zspdval: dc.l 0
  6218. PLR2_Zone: dc.w 0
  6219. PLR2_Roompt: dc.l 0
  6220. PLR2_OldRoompt: dc.l 0
  6221. PLR2_PointsToRotatePtr: dc.l 0
  6222. PLR2_ListOfGraphRooms: dc.l 0
  6223. PLR2_ForwardSpd: dc.w 0
  6224.  
  6225. liftanimtab:
  6226.  
  6227. endliftanimtab:
  6228.  
  6229. glassball:
  6230.  incbin "glassball.inc"
  6231. endglass
  6232. glassballpt: dc.l glassball
  6233.  
  6234. rndtab: ; incbin "randfile"
  6235. endrnd: 
  6236.  
  6237. brightanimtab:
  6238.  dcb.w 200,20
  6239.  dc.w 5
  6240.  dc.w 10,20
  6241.  dc.w 5
  6242.  dcb.w 30,20
  6243.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  6244.  dcb.w 40,0
  6245.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  6246.  dcb.w 300,0
  6247.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  6248.  dc.w -1
  6249.  
  6250. Roompt: dc.l 0
  6251. OldRoompt: dc.l 0
  6252.  
  6253. *****************************************************************
  6254.  *
  6255.  include "AB3:source/LevelData2"
  6256.  *
  6257. *****************************************************************
  6258.  
  6259.  
  6260. wallpt: dc.l 0
  6261. floorpt: dc.l 0
  6262.  
  6263. Rotated:
  6264.  ds.l 800 
  6265. ObjRotated:
  6266.  ds.l 800
  6267.  
  6268. OnScreen:
  6269.  ds.l 800 
  6270.  
  6271. startwait: dc.w 0
  6272. endwait: dc.w 0
  6273.  
  6274. Faces: incbin "faces2raw"
  6275.  
  6276. *******************************************************************
  6277.  
  6278. consttab:
  6279.  incbin "constantfile"
  6280.  
  6281. *******************************************************************
  6282.  
  6283. darkentab: incbin "darkenedcols"
  6284. brightentab: incbin "brightenfile"
  6285. WorkSpace:
  6286.  ds.l 8192 
  6287. waterfile: incbin "waterfile"
  6288.  
  6289.  SECTION ffff,CODE_C
  6290.  
  6291. nullspr: dc.l 0
  6292.  
  6293.  cnop 0,8
  6294. borders:
  6295.  incbin "leftbord"
  6296.  incbin "rightbord"
  6297.  
  6298. health: incbin "healthstrip"
  6299. Ammunition: incbin "ammostrip"
  6300. healthpal: incbin "healthpal"
  6301. PanelKeys: incbin "greenkey"
  6302.  incbin "redkey"
  6303.  incbin "yellowkey"
  6304.  incbin "bluekey"
  6305.  
  6306. null: ds.w 500
  6307. null2: ds.w 500
  6308. null3: ds.w 500
  6309. null4: ds.w 500
  6310.  
  6311.  
  6312. Blurbfield:
  6313.  
  6314.  dc.w bpl1ptl
  6315. bl1l: dc.w 0
  6316.  dc.w bpl1pth
  6317. bl1h: dc.w 0
  6318.  
  6319.  dc.w diwstart,$2c81
  6320.  dc.w diwstop,$1cc1
  6321.  dc.w ddfstart,$38
  6322.  dc.w ddfstop,$b8
  6323.  dc.w bplcon0,$9201
  6324.  dc.w bplcon1,0
  6325.  dc.w $106,$c40
  6326. blcols:
  6327.  dc.w col0,0
  6328.  dc.w col1,$fff
  6329.  
  6330.  dc.w $108,0
  6331.  dc.w $10a,0
  6332.  
  6333.  dc.w $ffff,$fffe
  6334.  dc.w $ffff,$fffe
  6335.  
  6336. nullline:
  6337.  ds.b 80
  6338.  
  6339. bigfield:    
  6340.                 ; Start of our copper list.
  6341.  
  6342.  dc.w dmacon,$8020
  6343.  dc.w intreq,$8011
  6344.  dc.w $1fc,$f
  6345.  dc.w diwstart
  6346. winstart: dc.w $2cb1
  6347.  dc.w diwstop
  6348. winstop: dc.w $2c91
  6349.  dc.w ddfstart
  6350. fetchstart: dc.w $48
  6351.  dc.w ddfstop
  6352. fetchstop: dc.w $88
  6353.  
  6354. bordercols:
  6355.  incbin "borderpal"
  6356.  
  6357.  dc.w spr0ptl
  6358. s0l:
  6359.  dc.w 0
  6360.  dc.w spr0pth
  6361. s0h:
  6362.  dc.w 0
  6363.  dc.w spr1ptl
  6364. s1l:
  6365.  dc.w 0
  6366.  dc.w spr1pth
  6367. s1h:
  6368.  dc.w 0
  6369.  dc.w spr2ptl
  6370. s2l:
  6371.  dc.w 0
  6372.  dc.w spr2pth
  6373. s2h:
  6374.  dc.w 0
  6375.  dc.w spr3ptl
  6376. s3l:
  6377.  dc.w 0
  6378.  dc.w spr3pth
  6379. s3h:
  6380.  dc.w 0
  6381.  dc.w spr4ptl
  6382. s4l:
  6383.  dc.w 0
  6384.  dc.w spr4pth
  6385. s4h:
  6386.  dc.w 0
  6387.  dc.w spr5ptl
  6388. s5l:
  6389.  dc.w 0
  6390.  dc.w spr5pth
  6391. s5h:
  6392.  dc.w 0
  6393.  dc.w spr6ptl
  6394. s6l:
  6395.  dc.w 0
  6396.  dc.w spr6pth
  6397. s6h:
  6398.  dc.w 0
  6399.  dc.w spr7ptl
  6400. s7l:
  6401.  dc.w 0
  6402.  dc.w spr7pth
  6403. s7h:
  6404.  dc.w 0
  6405.  
  6406.  
  6407.  dc.w $106,$c42
  6408.  incbin "borderpal"
  6409.  
  6410.  dc.w $106,$8c42
  6411.  dc.w col0
  6412. hitcol: dc.w $0
  6413.  dc.w $106,$c42
  6414.  dc.w col0
  6415. hitcol2: dc.w 0
  6416.  
  6417.  dc.w bplcon0,$7201
  6418.  dc.w bplcon1
  6419. smoff:
  6420.  dc.w $0
  6421.  
  6422.  dc.w $108
  6423. modulo: dc.w -24
  6424.  dc.w $10a,-24
  6425.  
  6426.  dc.w bpl1pth
  6427. pl1h
  6428.  dc.w 0
  6429.  
  6430.  dc.w bpl1ptl
  6431. pl1l
  6432.  dc.w 0
  6433.  
  6434.  dc.w bpl2pth
  6435. pl2h
  6436.  dc.w 0
  6437.  
  6438.  dc.w bpl2ptl
  6439. pl2l
  6440.  dc.w 0
  6441.  
  6442.  dc.w bpl3pth
  6443. pl3h
  6444.  dc.w 0
  6445.  
  6446.  dc.w bpl3ptl
  6447. pl3l
  6448.  dc.w 0
  6449.  
  6450.  dc.w bpl4pth
  6451. pl4h
  6452.  dc.w 0
  6453.  
  6454.  dc.w bpl4ptl
  6455. pl4l
  6456.  dc.w 0
  6457.  
  6458.  dc.w bpl5pth
  6459. pl5h
  6460.  dc.w 0
  6461.  
  6462.  dc.w bpl5ptl
  6463. pl5l
  6464.  dc.w 0
  6465.  
  6466.  dc.w bpl6pth
  6467. pl6h
  6468.  dc.w 0
  6469.  
  6470.  dc.w bpl6ptl
  6471. pl6l
  6472.  dc.w 0
  6473.  
  6474.  dc.w bpl7pth
  6475. pl7h
  6476.  dc.w 0
  6477.  
  6478.  dc.w bpl7ptl
  6479. pl7l
  6480.  dc.w 0
  6481.  
  6482.  
  6483.  dc.w $1001,$ff00
  6484.  dc.w intreq,$11
  6485. yposcop:
  6486.  dc.w $2a11,$fffe
  6487.  dc.w $8a,0
  6488.  
  6489.  ds.l 104*12
  6490.  
  6491. colbars:
  6492. val SET $2a
  6493.  dcb.l 104*80,$1fe0000
  6494.  dc.w $106,$c42
  6495.  
  6496.  dc.w $80
  6497. pch1:
  6498.  dc.w 0
  6499.  dc.w $82
  6500. pcl1:
  6501.  dc.w 0 
  6502.  dc.w $88,0
  6503.  
  6504.  dc.w $ffff,$fffe       ; End copper list.
  6505.  
  6506.  ds.l 104*12
  6507.  
  6508. colbars2:
  6509. val SET $2a
  6510.  dcb.l 104*80,$1fe0000
  6511.  
  6512.  dc.w $106,$c42
  6513.  
  6514.  dc.w $80
  6515. pch2:
  6516.  dc.w 0
  6517.  dc.w $82
  6518. pcl2:
  6519.  dc.w 0
  6520.  
  6521.  dc.w $88,0
  6522.  
  6523.  dc.w $ffff,$fffe       ; End copper list.
  6524.  
  6525.  ds.l 104*10
  6526.  
  6527. old: dc.l 0
  6528.  
  6529. prot5: dc.w 0
  6530. PanelCop:
  6531.  
  6532.  dc.w $10c,0
  6533.  dc.w bplcon0,$1201
  6534.  dc.w bpl1ptl
  6535. n1l:
  6536.  dc.w 0
  6537.  dc.w bpl1pth
  6538. n1h:
  6539.  dc.w 0
  6540.  dc.w $108,-24
  6541.  incbin "Panelpal"
  6542.  
  6543.  dc.w bpl2pth
  6544. p2h
  6545.  dc.w 0
  6546.  
  6547.  dc.w bpl2ptl
  6548. p2l
  6549.  dc.w 0
  6550.  
  6551.  dc.w bpl3pth
  6552. p3h
  6553.  dc.w 0
  6554.  
  6555.  dc.w bpl3ptl
  6556. p3l
  6557.  dc.w 0
  6558.  
  6559.  dc.w bpl4pth
  6560. p4h
  6561.  dc.w 0
  6562.  dc.w bpl4ptl
  6563. p4l
  6564.  dc.w 0
  6565.  dc.w bpl5pth
  6566. p5h
  6567.  dc.w 0
  6568.  dc.w bpl5ptl
  6569. p5l
  6570.  dc.w 0
  6571.  dc.w bpl6pth
  6572. p6h
  6573.  dc.w 0
  6574.  dc.w bpl6ptl
  6575. p6l
  6576.  dc.w 0
  6577.  dc.w bpl7pth
  6578. p7h
  6579.  dc.w 0
  6580.  dc.w bpl7ptl
  6581. p7l
  6582.  dc.w 0
  6583.  dc.w bpl8pth
  6584. p8h
  6585.  dc.w 0
  6586.  dc.w bpl8ptl
  6587. p8l
  6588.  dc.w 0
  6589.  
  6590.  dc.w $80
  6591. och:
  6592.  dc.w 0
  6593.  dc.w $82
  6594. ocl:
  6595.  dc.w 0
  6596.  
  6597.  dc.w ddfstart,$38
  6598.  dc.w ddfstop,$b8
  6599.  dc.w diwstart,$2c81
  6600.  dc.w diwstop,$2cc1
  6601.  
  6602.  dc.w bplcon0
  6603. Panelcon: dc.w $0211
  6604.  dc.w bpl1pth
  6605. p1h
  6606.  dc.w 0
  6607.  
  6608.  dc.w bpl1ptl
  6609. p1l
  6610.  dc.w 0
  6611.  
  6612.  
  6613.  dc.w $108,40*7
  6614.  dc.w $10a,40*7
  6615.  
  6616.  dc.w $ffff,$fffe
  6617.  
  6618.  dc.w $180,$fff
  6619.  
  6620.  
  6621.  dc.w $f801,$ff00
  6622.  dc.w col1,$50
  6623.  dc.w $f901,$ff00
  6624.  dc.w col1,$90
  6625.  dc.w $fa01,$ff00
  6626.  dc.w col1,$f0
  6627.  dc.w $fb01,$ff00
  6628.  dc.w col1,$f0
  6629.  dc.w $fc01,$ff00
  6630.  dc.w col1,$90
  6631.  dc.w $fd01,$ff00
  6632.  dc.w col1,$50
  6633.  
  6634.  dc.w $fe01,$ff00
  6635.  dc.w col1,$fff
  6636.  
  6637.  dc.w $ffdf,$fffe
  6638.  dc.w $a01,$ff00
  6639.  dc.w bplcon0,$201
  6640.  
  6641.  incbin "faces2cols"
  6642.  dc.w bpl1pth
  6643. f1h
  6644.  dc.w 0
  6645.  
  6646.  dc.w bpl1ptl
  6647. f1l
  6648.  dc.w 0
  6649.  
  6650.  dc.w bpl2pth
  6651. f2h
  6652.  dc.w 0
  6653.  
  6654.  dc.w bpl2ptl
  6655. f2l
  6656.  dc.w 0
  6657.  
  6658.  dc.w bpl3pth
  6659. f3h
  6660.  dc.w 0
  6661.  
  6662.  dc.w bpl3ptl
  6663. f3l
  6664.  dc.w 0
  6665.  
  6666.  dc.w bpl4pth
  6667. f4h
  6668.  dc.w 0
  6669.  dc.w bpl4ptl
  6670. f4l
  6671.  dc.w 0
  6672.  
  6673.  dc.w bpl5pth
  6674. f5h
  6675.  dc.w 0
  6676.  dc.w bpl5ptl
  6677. f5l
  6678.  dc.w 0
  6679.  
  6680.  dc.w $0c01,$ff00
  6681.  dc.w bplcon0,$5201
  6682.   
  6683.  dc.w $ffff,$fffe
  6684.  
  6685.  cnop 0,64
  6686. FacePlace:
  6687.  ds.l 6*32*5
  6688.  
  6689.  
  6690.  
  6691. ********************************************
  6692. * Stuff you don't have to worry about yet. *
  6693. ********************************************
  6694.  
  6695. closeeverything:
  6696.  
  6697.  jsr mt_end
  6698.  
  6699.  move.l #$dff000,a6
  6700.  move.l old,$dff080     ; Restore old copper list.
  6701.  move.l old,d0
  6702.  move.w d0,ocl
  6703.  swap d0
  6704.  move.w d0,och
  6705.  move.w #$8020,dmacon(a6)
  6706.  move.w #$f,dmacon(a6)
  6707.  move.l saveit,$6c.w
  6708.  move.l OLDKINT,$68.w
  6709.  move.w saveinters,d0
  6710.  or.w #$c000,d0
  6711.  move.w d0,intena(a6)
  6712.  clr.w $dff0a8
  6713.  clr.w $dff0b8
  6714.  clr.w $dff0c8
  6715.  clr.w $dff0d8
  6716.  
  6717. ; move.w #3,d0
  6718. ;nonewvbl
  6719. ; btst #5,intreqrl(a6)
  6720. ; beq.s nonewvbl
  6721. ; move.w #$20,intreq(a6)
  6722. ; dbra d0,nonewvbl
  6723.  
  6724. ; move.l oldview,a1
  6725. ; move.l a1,d0
  6726. ; move.l gfxbase,a6
  6727. ; jsr -$de(a6)
  6728.  
  6729.  
  6730. ; cmp.b #'t',option+1
  6731. ; bra.s leaveold
  6732. ; move.w #$f8e,$dff1dc
  6733. ;leaveold:
  6734.  
  6735.  rte
  6736.  
  6737. intbase: dc.l 0
  6738. gfxbase: dc.l 0
  6739. oldview: dc.l 0
  6740.  
  6741. stuff:
  6742.  
  6743.     Lea    gfxname(pc),a1    
  6744.     Moveq.l    #0,d0
  6745.     Move.l    $4.w,a6    
  6746.     Jsr    -$228(a6)
  6747.     Move.l     d0,gfxbase
  6748.     Move.l    d0,a6                Use As Base Reg
  6749.     Move.l    34(a6),oldview
  6750.     move.l 38(a6),old
  6751.  
  6752.  jmp endstuff
  6753.  
  6754. gfxname dc.b "graphics.library",0
  6755.  even
  6756. INTUNAME    dc.b    "intuition.library",0
  6757.  
  6758.  even
  6759.  
  6760.  
  6761.  cnop 0,64
  6762.  
  6763. Panel:
  6764.  incbin "PanelRaw"
  6765.  
  6766. TimerScr: ds.b 40*64
  6767.  
  6768. scrntab:
  6769.  ds.b 16
  6770. val SET 32
  6771.  REPT 96
  6772.  dc.b val,val,val
  6773. val SET val+1
  6774.  ENDR
  6775.  ds.b 16
  6776.  
  6777.  cnop 0,64
  6778. scrn:
  6779.  
  6780.  dcb.l 8,$33333333
  6781.  dc.l 0
  6782.  dc.l 0
  6783.  
  6784.  dcb.l 8,$0f0f0f0f
  6785.  dc.l 0
  6786.  dc.l 0
  6787.  
  6788.  dcb.l 8,$00ff00ff
  6789.  dc.l 0
  6790.  dc.l 0
  6791.  
  6792.  dcb.l 8,$0000ffff
  6793.  dc.l 0
  6794.  dc.l 0
  6795.  
  6796.  dc.l 0,-1,0,-1,0,-1,0,-1
  6797.  dc.l 0
  6798.  dc.l 0
  6799.  
  6800.  dc.l -1,-1,0,0,-1,-1,0,0
  6801.  dc.l 0
  6802.  dc.l 0
  6803.  
  6804.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  6805.  dc.l 0
  6806.  dc.l 0
  6807.  
  6808. NumTimes: dc.l 0
  6809. TimeCount: dc.l 0
  6810. oldtime: dc.l 0
  6811. counting: dc.b 0
  6812. oktodisplay: dc.b 0
  6813.  
  6814. INITTIMER:
  6815.  move.l #0,TimeCount
  6816.  move.l #0,NumTimes
  6817.  rts
  6818.  
  6819. STARTCOUNT:
  6820.  move.l d0,-(a7)
  6821.  move.l $dff004,d0
  6822.  and.l #$1ffff,d0
  6823.  move.l d0,oldtime
  6824.  st counting
  6825.  move.l (a7)+,d0
  6826.  rts
  6827.  
  6828. STOPCOUNT:
  6829.  move.l d0,-(a7)
  6830.  move.l $dff004,d0
  6831.  and.l #$1ffff,d0
  6832.  
  6833.  sub.l oldtime,d0
  6834.  cmp.l #-256,d0
  6835.  bge.s okcount
  6836.  add.l #313*256,d0
  6837. okcount:
  6838.  add.l d0,TimeCount
  6839.  addq.l #1,NumTimes
  6840.  clr.b counting
  6841.  move.l (a7)+,d0
  6842.  rts
  6843.  
  6844. STOPCOUNTNOADD:
  6845.  move.l d0,-(a7)
  6846.  move.l $dff004,d0
  6847.  and.l #$1ffff,d0
  6848.  
  6849.  sub.l oldtime,d0
  6850.  cmp.l #-256,d0
  6851.  bge.s okcount2
  6852.  add.l #313*256,d0
  6853. okcount2:
  6854.  add.l d0,TimeCount
  6855.  clr.b counting
  6856.  move.l (a7)+,d0
  6857.  rts
  6858.  
  6859. maxbot: dc.w 0
  6860. tstneg: dc.l 0
  6861.  
  6862. STOPTIMER:
  6863.  st oktodisplay
  6864.  rts
  6865.  
  6866. digits: incbin "numbers.inc"
  6867.  
  6868.  
  6869.  Section Sounds,CODE
  6870.  
  6871. Scream: incbin "ab3:sounds/Scream"
  6872.  ds.w 100
  6873. EndScream:
  6874. LowScream: incbin "ab3:sounds/LowScream"
  6875.  ds.w 100
  6876. EndLowScream:
  6877. BaddieGun: incbin "ab3:sounds/BaddieGun"
  6878. EndBaddieGun:
  6879. bass: incbin "ab3:sounds/backbass+drum"
  6880. bassend:
  6881. Shoot: incbin "ab3:sounds/fire!"
  6882. EndShoot:
  6883. Munch: incbin "ab3:sounds/munch"
  6884. EndMunch:
  6885. PooGun: incbin "ab3:sounds/shoot.dm"
  6886. EndPooGun:
  6887. Collect: incbin "ab3:sounds/collect"
  6888. EndCollect:
  6889. DoorNoise: incbin "ab3:sounds/newdoor"
  6890. EndDoorNoise:
  6891. Stomp: incbin "ab3:sounds/footstep3"
  6892. EndStomp:
  6893. SwitchNoise: incbin "ab3:sounds/switch"
  6894. EndSwitch:
  6895. Reload: incbin "ab3:sounds/switch1.SFX"
  6896. EndReload:
  6897. NoAmmo: incbin "ab3:sounds/noammo"
  6898. EndNoAmmo:
  6899. Splotch: incbin "ab3:sounds/splotch"
  6900. EndSplotch:
  6901. SplatPop: incbin "ab3:sounds/splatpop"
  6902. EndSplatPop:
  6903. Boom: incbin "ab3:sounds/boom"
  6904. EndBoom:
  6905. Hiss: incbin "ab3:sounds/newhiss"
  6906. EndHiss:
  6907. Howl1: incbin "ab3:sounds/howl1"
  6908. EndHowl1:
  6909. Howl2: incbin "ab3:sounds/howl2"
  6910. EndHowl2:
  6911. Pant: incbin "ab3:sounds/pant"
  6912. EndPant:
  6913. Whoosh: incbin "ab3:sounds/whoosh"
  6914. EndWhoosh:
  6915.  SECTION music,code_c
  6916.  
  6917. UseAllChannels: dc.w 0
  6918.  
  6919. mt_init:move.l    mt_data,a0
  6920.     move.l    a0,a1
  6921.     add.l    #$3b8,a1
  6922.     moveq    #$7f,d0
  6923.     moveq    #0,d1
  6924. mt_loop:move.l    d1,d2
  6925.     subq.w    #1,d0
  6926. mt_lop2:move.b    (a1)+,d1
  6927.     cmp.b    d2,d1
  6928.     bgt.s    mt_loop
  6929.     dbf    d0,mt_lop2
  6930.     addq.b    #1,d2
  6931.  
  6932.     lea    mt_samplestarts(pc),a1
  6933.     asl.l    #8,d2
  6934.     asl.l    #2,d2
  6935.     add.l    #$43c,d2
  6936.     add.l    a0,d2
  6937.     move.l    d2,a2
  6938.     moveq    #$1e,d0
  6939. mt_lop3:clr.l    (a2)
  6940.     move.l    a2,(a1)+
  6941.     moveq    #0,d1
  6942.     move.w    42(a0),d1
  6943.     asl.l    #1,d1
  6944.     add.l    d1,a2
  6945.     add.l    #$1e,a0
  6946.     dbf    d0,mt_lop3
  6947.  
  6948.     or.b    #$2,$bfe001
  6949.     move.b    #$6,mt_speed
  6950.     clr.w    $dff0a8
  6951.     clr.w    $dff0b8
  6952.     clr.w    $dff0c8
  6953.     clr.w    $dff0d8
  6954.     clr.b    mt_songpos
  6955.     clr.b    mt_counter
  6956.     clr.w    mt_pattpos
  6957.     rts
  6958.  
  6959. mt_end:    clr.w    $dff0a8
  6960.     clr.w    $dff0b8
  6961.     clr.w    $dff0c8
  6962.     clr.w    $dff0d8
  6963.     move.w    #$f,$dff096
  6964.     rts
  6965.  
  6966. mt_music:
  6967.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  6968.     move.l    mt_data,a0
  6969.     addq.b    #$1,mt_counter
  6970.     move.b    mt_counter,D0
  6971.     cmp.b    mt_speed,D0
  6972.     blt.s    mt_nonew
  6973.     clr.b    mt_counter
  6974.     bra    mt_getnew
  6975.  
  6976. mt_nonew:
  6977.     lea    mt_voice1(pc),a6
  6978.     lea    $dff0a0,a5
  6979.     bsr    mt_checkcom
  6980.     lea    mt_voice2(pc),a6
  6981.     lea    $dff0b0,a5
  6982.     bsr    mt_checkcom
  6983.     tst.b UseAllChannels
  6984.     beq mt_endr
  6985.      lea    mt_voice3(pc),a6
  6986.     lea    $dff0c0,a5
  6987.     bsr    mt_checkcom
  6988.     lea    mt_voice4(pc),a6
  6989.     lea    $dff0d0,a5
  6990.     bsr    mt_checkcom
  6991.     bra    mt_endr
  6992.  
  6993. mt_arpeggio:
  6994.     moveq    #0,d0
  6995.     move.b    mt_counter,d0
  6996.     divs    #$3,d0
  6997.     swap    d0
  6998.     cmp.w    #$0,d0
  6999.     beq.s    mt_arp2
  7000.     cmp.w    #$2,d0
  7001.     beq.s    mt_arp1
  7002.  
  7003.     moveq    #0,d0
  7004.     move.b    $3(a6),d0
  7005.     lsr.b    #4,d0
  7006.     bra.s    mt_arp3
  7007. mt_arp1:moveq    #0,d0
  7008.     move.b    $3(a6),d0
  7009.     and.b    #$f,d0
  7010.     bra.s    mt_arp3
  7011. mt_arp2:move.w    $10(a6),d2
  7012.     bra.s    mt_arp4
  7013. mt_arp3:asl.w    #1,d0
  7014.     moveq    #0,d1
  7015.     move.w    $10(a6),d1
  7016.     lea    mt_periods(pc),a0
  7017.     moveq    #$24,d7
  7018. mt_arploop:
  7019.     move.w    (a0,d0.w),d2
  7020.     cmp.w    (a0),d1
  7021.     bge.s    mt_arp4
  7022.     addq.l    #2,a0
  7023.     dbf    d7,mt_arploop
  7024.     rts
  7025. mt_arp4:move.w    d2,$6(a5)
  7026.     rts
  7027.  
  7028. mt_getnew:
  7029.     move.l    mt_data,a0
  7030.     move.l    a0,a3
  7031.     move.l    a0,a2
  7032.     add.l    #$c,a3
  7033.     add.l    #$3b8,a2
  7034.     add.l    #$43c,a0
  7035.  
  7036.     moveq    #0,d0
  7037.     move.l    d0,d1
  7038.     move.b    mt_songpos,d0
  7039.     move.b    (a2,d0.w),d1
  7040.     asl.l    #8,d1
  7041.     asl.l    #2,d1
  7042.     add.w    mt_pattpos,d1
  7043.     clr.w    mt_dmacon
  7044.  
  7045.     lea    $dff0a0,a5
  7046.     lea    mt_voice1(pc),a6
  7047.     bsr.s    mt_playvoice
  7048.     lea    $dff0b0,a5
  7049.     lea    mt_voice2(pc),a6
  7050.     bsr.s    mt_playvoice
  7051.     tst.b UseAllChannels
  7052.     beq mt_setdma
  7053.     lea    $dff0c0,a5
  7054.     lea    mt_voice3(pc),a6
  7055.     bsr.s    mt_playvoice
  7056.     lea    $dff0d0,a5
  7057.     lea    mt_voice4(pc),a6
  7058.     bsr.s    mt_playvoice
  7059.     bra    mt_setdma
  7060.  
  7061. mt_playvoice:
  7062.     move.l    (a0,d1.l),(a6)
  7063.     addq.l    #4,d1
  7064.     moveq    #0,d2
  7065.     move.b    $2(a6),d2
  7066.     and.b    #$f0,d2
  7067.     lsr.b    #4,d2
  7068.     move.b    (a6),d0
  7069.     and.b    #$f0,d0
  7070.     or.b    d0,d2
  7071.     tst.b    d2
  7072.     beq.s    mt_setregs
  7073.     moveq    #0,d3
  7074.     lea    mt_samplestarts(pc),a1
  7075.     move.l    d2,d4
  7076.     subq.l    #$1,d2
  7077.     asl.l    #2,d2
  7078.     mulu    #$1e,d4
  7079.     move.l    (a1,d2.l),$4(a6)
  7080.     move.w    (a3,d4.l),$8(a6)
  7081.     move.w    $2(a3,d4.l),$12(a6)
  7082.     move.w    $4(a3,d4.l),d3
  7083.     tst.w    d3
  7084.     beq.s    mt_noloop
  7085.     move.l    $4(a6),d2
  7086.     asl.w    #1,d3
  7087.     add.l    d3,d2
  7088.     move.l    d2,$a(a6)
  7089.     move.w    $4(a3,d4.l),d0
  7090.     add.w    $6(a3,d4.l),d0
  7091.     move.w    d0,8(a6)
  7092.     move.w    $6(a3,d4.l),$e(a6)
  7093.     move.w    $12(a6),d0
  7094.     asr.w #2,d0
  7095.     move.w d0,$8(a5)
  7096.     bra.s    mt_setregs
  7097. mt_noloop:
  7098.     move.l    $4(a6),d2
  7099.     add.l    d3,d2
  7100.     move.l    d2,$a(a6)
  7101.     move.w    $6(a3,d4.l),$e(a6)
  7102.     move.w    $12(a6),d0
  7103.     asr.w #2,d0
  7104.     move.w d0,$8(a5)
  7105. mt_setregs:
  7106.     move.w    (a6),d0
  7107.     and.w    #$fff,d0
  7108.     beq    mt_checkcom2
  7109.     move.b    $2(a6),d0
  7110.     and.b    #$F,d0
  7111.     cmp.b    #$3,d0
  7112.     bne.s    mt_setperiod
  7113.     bsr    mt_setmyport
  7114.     bra    mt_checkcom2
  7115. mt_setperiod:
  7116.     move.w    (a6),$10(a6)
  7117.     and.w    #$fff,$10(a6)
  7118.     move.w    $14(a6),d0
  7119.     move.w    d0,$dff096
  7120.     clr.b    $1b(a6)
  7121.  
  7122.     move.l    $4(a6),(a5)
  7123.     move.w    $8(a6),$4(a5)
  7124.     move.w    $10(a6),d0
  7125.     and.w    #$fff,d0
  7126.     move.w    d0,$6(a5)
  7127.     move.w    $14(a6),d0
  7128.     or.w    d0,mt_dmacon
  7129.     bra    mt_checkcom2
  7130.  
  7131. mt_setdma:
  7132.      move.w #250,d0
  7133. mt_wait:
  7134.      add.w #1,testchip
  7135.      dbra d0,mt_wait
  7136.     move.w    mt_dmacon,d0
  7137.     or.w    #$8000,d0
  7138.     and.w #%1111111111110011,d0
  7139.     move.w    d0,$dff096
  7140.     move.w #250,d0
  7141. mt_wait2:
  7142.     add.w #1,testchip
  7143.     dbra    d0,mt_wait2
  7144.     lea    $dff000,a5
  7145.     tst.b UseAllChannels
  7146.     beq.s noall
  7147.     lea    mt_voice4(pc),a6
  7148.     move.l    $a(a6),$d0(a5)
  7149.     move.w    $e(a6),$d4(a5)
  7150.     lea    mt_voice3(pc),a6
  7151.     move.l    $a(a6),$c0(a5)
  7152.     move.w    $e(a6),$c4(a5)
  7153. noall:
  7154.     lea    mt_voice2(pc),a6
  7155.     move.l    $a(a6),$b0(a5)
  7156.     move.w    $e(a6),$b4(a5)
  7157.     lea    mt_voice1(pc),a6
  7158.     move.l    $a(a6),$a0(a5)
  7159.     move.w    $e(a6),$a4(a5)
  7160.  
  7161.     add.w    #$10,mt_pattpos
  7162.     cmp.w    #$400,mt_pattpos
  7163.     bne.s    mt_endr
  7164. mt_nex:    clr.w    mt_pattpos
  7165.     clr.b    mt_break
  7166.     addq.b    #1,mt_songpos
  7167.     and.b    #$7f,mt_songpos
  7168.     move.b    mt_songpos,d1
  7169. ;    cmp.b    mt_data+$3b6,d1
  7170. ;    bne.s    mt_endr
  7171. ;    move.b    mt_data+$3b7,mt_songpos
  7172. mt_endr:tst.b    mt_break
  7173.     bne.s    mt_nex
  7174.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  7175.     rts
  7176.  
  7177. mt_setmyport:
  7178.     move.w    (a6),d2
  7179.     and.w    #$fff,d2
  7180.     move.w    d2,$18(a6)
  7181.     move.w    $10(a6),d0
  7182.     clr.b    $16(a6)
  7183.     cmp.w    d0,d2
  7184.     beq.s    mt_clrport
  7185.     bge.s    mt_rt
  7186.     move.b    #$1,$16(a6)
  7187.     rts
  7188. mt_clrport:
  7189.     clr.w    $18(a6)
  7190. mt_rt:    rts
  7191.  
  7192. CODESTORE: dc.l 0
  7193.  
  7194. mt_myport:
  7195.     move.b    $3(a6),d0
  7196.     beq.s    mt_myslide
  7197.     move.b    d0,$17(a6)
  7198.     clr.b    $3(a6)
  7199. mt_myslide:
  7200.     tst.w    $18(a6)
  7201.     beq.s    mt_rt
  7202.     moveq    #0,d0
  7203.     move.b    $17(a6),d0
  7204.     tst.b    $16(a6)
  7205.     bne.s    mt_mysub
  7206.     add.w    d0,$10(a6)
  7207.     move.w    $18(a6),d0
  7208.     cmp.w    $10(a6),d0
  7209.     bgt.s    mt_myok
  7210.     move.w    $18(a6),$10(a6)
  7211.     clr.w    $18(a6)
  7212. mt_myok:move.w    $10(a6),$6(a5)
  7213.     rts
  7214. mt_mysub:
  7215.     sub.w    d0,$10(a6)
  7216.     move.w    $18(a6),d0
  7217.     cmp.w    $10(a6),d0
  7218.     blt.s    mt_myok
  7219.     move.w    $18(a6),$10(a6)
  7220.     clr.w    $18(a6)
  7221.     move.w    $10(a6),$6(a5)
  7222.     rts
  7223.  
  7224. mt_vib:    move.b    $3(a6),d0
  7225.     beq.s    mt_vi
  7226.     move.b    d0,$1a(a6)
  7227.  
  7228. mt_vi:    move.b    $1b(a6),d0
  7229.     lea    mt_sin(pc),a4
  7230.     lsr.w    #$2,d0
  7231.     and.w    #$1f,d0
  7232.     moveq    #0,d2
  7233.     move.b    (a4,d0.w),d2
  7234.     move.b    $1a(a6),d0
  7235.     and.w    #$f,d0
  7236.     mulu    d0,d2
  7237.     lsr.w    #$6,d2
  7238.     move.w    $10(a6),d0
  7239.     tst.b    $1b(a6)
  7240.     bmi.s    mt_vibmin
  7241.     add.w    d2,d0
  7242.     bra.s    mt_vib2
  7243. mt_vibmin:
  7244.     sub.w    d2,d0
  7245. mt_vib2:move.w    d0,$6(a5)
  7246.     move.b    $1a(a6),d0
  7247.     lsr.w    #$2,d0
  7248.     and.w    #$3c,d0
  7249.     add.b    d0,$1b(a6)
  7250.     rts
  7251.  
  7252. mt_nop:    move.w    $10(a6),$6(a5)
  7253.     rts
  7254.  
  7255.  
  7256. mt_checkcom:
  7257.     move.w    $2(a6),d0
  7258.     and.w    #$fff,d0
  7259.     beq.s    mt_nop
  7260.     move.b    $2(a6),d0
  7261.     and.b    #$f,d0
  7262.     tst.b    d0
  7263.     beq    mt_arpeggio
  7264.     cmp.b    #$1,d0
  7265.     beq.s    mt_portup
  7266.     cmp.b    #$2,d0
  7267.     beq    mt_portdown
  7268.     cmp.b    #$3,d0
  7269.     beq    mt_myport
  7270.     cmp.b    #$4,d0
  7271.     beq    mt_vib
  7272.     move.w    $10(a6),$6(a5)
  7273.     cmp.b    #$a,d0
  7274.     beq.s    mt_volslide
  7275.     rts
  7276.  
  7277. mt_volslide:
  7278.     moveq    #0,d0
  7279.     move.b    $3(a6),d0
  7280.     lsr.b    #4,d0
  7281.     tst.b    d0
  7282.     beq.s    mt_voldown
  7283.     add.w    d0,$12(a6)
  7284.     cmp.w    #$40,$12(a6)
  7285.     bmi.s    mt_vol2
  7286.     move.w    #$40,$12(a6)
  7287. mt_vol2:move.w    $12(a6),d0
  7288.     asr.w #2,d0
  7289.     move.w d0,$8(a5)
  7290.     rts
  7291.  
  7292. mt_voldown:
  7293.     moveq    #0,d0
  7294.     move.b    $3(a6),d0
  7295.     and.b    #$f,d0
  7296.     sub.w    d0,$12(a6)
  7297.     bpl.s    mt_vol3
  7298.     clr.w    $12(a6)
  7299. mt_vol3:move.w    $12(a6),d0
  7300.     asr.w #2,d0
  7301.     move.w d0,$8(a5)
  7302.     rts
  7303.  
  7304. mt_portup:
  7305.     moveq    #0,d0
  7306.     move.b    $3(a6),d0
  7307.     sub.w    d0,$10(a6)
  7308.     move.w    $10(a6),d0
  7309.     and.w    #$fff,d0
  7310.     cmp.w    #$71,d0
  7311.     bpl.s    mt_por2
  7312.     and.w    #$f000,$10(a6)
  7313.     or.w    #$71,$10(a6)
  7314. mt_por2:move.w    $10(a6),d0
  7315.     and.w    #$fff,d0
  7316.     move.w    d0,$6(a5)
  7317.     rts
  7318.  
  7319. mt_portdown:
  7320.     clr.w    d0
  7321.     move.b    $3(a6),d0
  7322.     add.w    d0,$10(a6)
  7323.     move.w    $10(a6),d0
  7324.     and.w    #$fff,d0
  7325.     cmp.w    #$358,d0
  7326.     bmi.s    mt_por3
  7327.     and.w    #$f000,$10(a6)
  7328.     or.w    #$358,$10(a6)
  7329. mt_por3:move.w    $10(a6),d0
  7330.     and.w    #$fff,d0
  7331.     move.w    d0,$6(a5)
  7332.     rts
  7333.  
  7334. mt_checkcom2:
  7335.     move.b    $2(a6),d0
  7336.     and.b    #$f,d0
  7337.     cmp.b    #$e,d0
  7338.     beq.s    mt_setfilt
  7339.     cmp.b    #$d,d0
  7340.     beq.s    mt_pattbreak
  7341.     cmp.b    #$b,d0
  7342.     beq.s    mt_posjmp
  7343.     cmp.b    #$c,d0
  7344.     beq.s    mt_setvol
  7345.     cmp.b    #$f,d0
  7346.     beq.s    mt_setspeed
  7347.     rts
  7348.  
  7349. mt_setfilt:
  7350.     move.b    $3(a6),d0
  7351.     and.b    #$1,d0
  7352.     asl.b    #$1,d0
  7353.     and.b    #$fd,$bfe001
  7354.     or.b    d0,$bfe001
  7355.     rts
  7356. mt_pattbreak:
  7357.     not.b    mt_break
  7358.     rts
  7359. mt_posjmp:
  7360.     st reachedend
  7361.     move.b    $3(a6),d0
  7362.     subq.b    #$1,d0
  7363.     move.b    d0,mt_songpos
  7364.     not.b    mt_break
  7365.     rts
  7366. mt_setvol:
  7367.     cmp.b    #$40,$3(a6)
  7368.     ble.s    mt_vol4
  7369.     move.b    #$40,$3(a6)
  7370. mt_vol4:move.b    $3(a6),d0
  7371.     asr.w #2,d0
  7372.     move.w d0,$8(a5)
  7373.     rts
  7374. mt_setspeed:
  7375.     cmp.b    #$1f,$3(a6)
  7376.     ble.s    mt_sets
  7377.     move.b    #$1f,$3(a6)
  7378. mt_sets:move.b    $3(a6),d0
  7379.     beq.s    mt_rts2
  7380.     move.b    d0,mt_speed
  7381.     clr.b    mt_counter
  7382. mt_rts2:rts
  7383.  
  7384. mt_sin:
  7385.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  7386.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  7387.  
  7388. mt_periods:
  7389.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  7390.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  7391.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  7392.  DC.w $007f,$0078,$0071,$0000,$0000
  7393.  
  7394. reachedend: dc.b 0
  7395. mt_speed:    DC.b    6
  7396. mt_songpos:    DC.b    0
  7397. mt_pattpos:    DC.w    0
  7398. mt_counter:    DC.b    0
  7399.  
  7400. mt_break:    DC.b    0
  7401. mt_dmacon:    DC.w    0
  7402. mt_samplestarts:DS.L    $1f
  7403. mt_voice1:    DS.w    10
  7404.         DC.w    1
  7405.         DS.w    3
  7406. mt_voice2:    DS.w    10
  7407.         DC.w    2
  7408.         DS.w    3
  7409. mt_voice3:    DS.w    10
  7410.         DC.w    4
  7411.         DS.w    3
  7412. mt_voice4:    DS.w    10
  7413.         DC.w    8
  7414.         DS.w    3
  7415.  
  7416. testchip: dc.w 0
  7417.  
  7418. ;/* End of File */
  7419. mt_data: dc.l 0
  7420. tstchip: dc.l 0
  7421.  
  7422. ingame:
  7423. ; incbin "ab3:includes/ingame"
  7424. gameover: incbin "ab3:includes/gameover"
  7425. welldone: incbin "ab3:includes/welldone"
  7426.